forked from menault/TD1_DEV51_Qualite_Algo
TD1
This commit is contained in:
42
quicksort.c
Normal file
42
quicksort.c
Normal file
@@ -0,0 +1,42 @@
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
void swap(int* intArray, int num1, int num2) {
|
||||
int temp = intArray[num1];
|
||||
intArray[num1] = intArray[num2];
|
||||
intArray[num2] = temp;
|
||||
}
|
||||
|
||||
int partition(int* intArray, int left, int right, int pivot) {
|
||||
int leftPointer = left - 1;
|
||||
int rightPointer = right;
|
||||
while (true) {
|
||||
while (intArray[++leftPointer] < pivot) {
|
||||
//do nothing
|
||||
}
|
||||
while (rightPointer > 0 && intArray[--rightPointer] > pivot) {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
if (leftPointer >= rightPointer) {
|
||||
break;
|
||||
} else {
|
||||
swap(intArray, leftPointer, rightPointer);
|
||||
}
|
||||
}
|
||||
|
||||
swap(intArray, leftPointer, right);
|
||||
return leftPointer;
|
||||
}
|
||||
|
||||
void quicksort(int* array, int left, int right) {
|
||||
if (right - left <= 0) {
|
||||
return;
|
||||
} else {
|
||||
int pivot = array[right];
|
||||
int partitionPoint = partition(array, left, right, pivot);
|
||||
quicksort(array, left, partitionPoint - 1);
|
||||
quicksort(array, partitionPoint + 1, right);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user