Skip to content
Snippets Groups Projects
Commit d75dbab5 authored by paul.albuquer's avatar paul.albuquer
Browse files

little adjustments to quicksort

parent 0a96a074
No related branches found
No related tags found
No related merge requests found
......@@ -4,12 +4,16 @@
#include <assert.h>
void print(int size,int tab[size]) {
for (int i=0;i<size;i++) printf("%d ",tab[i]);
for (int i=0;i<size;i++) {
printf("%d ",tab[i]);
}
}
void random_tab(int size,int tab[size],int inf,int sup) {
assert(sup > inf);
for (int i=0;i<size;i++) tab[i] = inf+rand()%(sup-inf);
for (int i=0;i<size;i++) {
tab[i] = inf+rand()%(sup-inf);
}
}
void swap(int* p_a,int* p_b) {
......@@ -21,16 +25,17 @@ void swap(int* p_a,int* p_b) {
int partition(int size,int array[size],int first,int last) {
int pivot = array[last];
int i = first-1,j = last;
while (true) {
do {
do {
i++;
} while (array[i] < pivot && i<j);
do {
j--;
} while(array[j] > pivot && i<j);
if (i >= j) break;
swap(&array[i],&array[j]);
}
if (j>i) {
swap(&array[i],&array[j]);
}
} while (j > i);
swap(&array[i],&array[last]);
return i;
}
......@@ -38,17 +43,22 @@ int partition(int size,int array[size],int first,int last) {
void quicksort(int size,int array[size],int first,int last) {
if (first < last) {
int midpoint = partition(size,array,first,last);
if (first < midpoint-1) quicksort(size,array,first,midpoint-1);
if (midpoint+1 < last) quicksort(size,array,midpoint+1,last);
if (first < midpoint-1) {
quicksort(size,array,first,midpoint-1);
}
if (midpoint+1 < last) {
quicksort(size,array,midpoint+1,last);
}
}
}
void test_ordre(int size,int array[size]) {
for (int i=0;i<size-1;i++)
for (int i=0;i<size-1;i++) {
if (array[i] > array[i+1]) {
printf("erreur");
return;
}
}
printf("ok");
}
......
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <assert.h>
void print(int size,int tab[size]) {
for (int i=0;i<size;i++) {
printf("%d ",tab[i]);
}
printf("\n");
}
void random_tab(int size,int tab[size],int inf,int sup) {
assert(sup > inf);
for (int i=0;i<size;i++) {
tab[i] = inf+rand()%(sup-inf);
}
......@@ -27,14 +26,11 @@ void swap(int* p_a,int* p_b) {
int partition(int size,int array[size],int first,int last) {
int pivot = array[last];
int i = first-1,j = last;
while (true) {
do {
// à compléter pour <i>: do {...} while (...);
// à compléter pour <j>: do {...} while (...);
if (i >= j) {
break;
}
// à compléter: échanger cases <i> et <j> du tableau <array>
}
} while (j > i);
// à compléter: échanger cases <i> et <last> du tableau <array>
return i;
}
......@@ -71,7 +67,6 @@ int main(int argc,char** argv) {
for (int k=0;k<20;k++) {
random_tab(size,res,0,100);
print(size,res);
printf("\n");
quicksort(size,res,0,size-1);
print(size,res);
test_ordre(size,res);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment