Commit 57f5321b authored by Antoine Sauray's avatar Antoine Sauray
Browse files

quicksort

parents
# Nous voulons un cmake "récent" pour utiliser les dernières fonctionnalités
cmake_minimum_required(VERSION 3.0)
# Notre projet est étiqueté hello
project(sort)
set(CMAKE_C_FLAGS "-std=c99")
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin )
# Crée des variables avec les fichiers à compiler
file(GLOB SRC
"src/*.c"
)
file(GLOB HEADER
"include/*.h"
)
# On indique que l'on veut un exécutable "hello" compilé à partir des fichiers décrits par les variables SRCS et HEADERS
add_executable(sort ${SRC} ${HEADER})
#ifndef MAIN_H
#define MAIN_H
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "../include/utils.h"
#include "../include/sort.h"
int main();
#endif
\ No newline at end of file
#ifndef SORT_H
#define SORT_H
void quicksort(int *tab, int debut, int fin, int order);
#endif
\ No newline at end of file
#ifndef UTILS_H
#define UTILS_H
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>
static const int ASCENDING=1, DESCENDING=-1;
void printArray(int* array, int size);
void init(int* array, int size);
bool isSorted(int* array, int size, int order);
#endif
\ No newline at end of file
#include "../include/main.h"
#define SIZE 10
int main(){
srand(time(NULL));
int rands[SIZE];
init(rands, SIZE);
if(isSorted(rands, SIZE, DESCENDING)){
printf("array is sorted\n");
}
else{
printf("array is not sorted\n");
}
printArray(rands, SIZE);
quicksort(rands, 0, SIZE, DESCENDING);
printArray(rands, SIZE);
return 0;
}
#define swap(t, x, y) {t tmp = x; x = y; y = tmp;}
#include "../include/sort.h"
void quicksort(int *tab, int debut, int fin, int order){
int temp;
int gauche = debut-1;
int droite = fin+1;
const int pivot = tab[debut];
// Condition d'arrêt : si le tableau est de longueur nulle
if(debut >= fin){
return;
}
while(1){ //while true
if(order>0){
do droite--; while(tab[droite] > pivot); //parcourt du tableau de droite à gauche
do gauche++; while(tab[gauche] < pivot); //parcourt du tableau de gauche à droite
}
else if(order <0){
do droite--; while(tab[droite] < pivot); //parcourt du tableau de droite à gauche
do gauche++; while(tab[gauche] > pivot); //parcourt du tableau de gauche à droite
}
if(gauche < droite){ //si deux éléments sont mal placés, on les permutte
swap(int, tab[gauche], tab[droite]);
}
else{
break;
}
}
//récursion
quicksort(tab, debut, droite, order);
quicksort(tab, droite+1, fin, order);
}
\ No newline at end of file
#include "../include/utils.h"
void printArray(int* array, int size){
for(int i=0;i<size;i++){
printf("%d ", array[i]);
}
printf("\n");
}
void init(int* array, int size){
for(int i=0;i<size;i++){
array[i] = rand()%(100-0) +0;
}
}
bool isSorted(int* array, int size, int order){
for(int i=0;i<size-1;i++){
if(array[i]>array[i+order]){
return false;
}
}
return true;
}
\ No newline at end of file
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment