经典的快速排序算法 其中将一个数组按照枢纽元的大小将其分成左右两个部分的算法成为快速算法
这个写个避免了判断相等的情况 当遇到元素与枢纽元相等时停止 目的是为了产生两个相对平衡的左右数组
void testQuickSort(){
int arr[] = {2, 4, 3, 9, 6, 5, 7, 0, 2, 1};
//int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
quickSort(arr, sizeof(arr)/sizeof(int));
for (int i = 0; i < sizeof(arr)/sizeof(int); i++) {
printf("valus is %d\n", arr[i]);
}
}
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void quickSort(int arr[], int length){
if (length <= 1) {
return;
}
if (length == 2) {
if (arr[0] > arr[1]) {
swap(arr, arr + 1);
}
return;
}
int center = (length - 1) / 2;
if (arr[0] > arr[center]) {
swap(arr, arr + center);
}
if (arr[0] > arr[length - 1]) {
swap(arr, arr + length - 1);
}
if (arr[center] > arr[length - 1]) {
swap(arr + center, arr + length - 1);
}
swap(arr + center, arr + length - 1);
int elementPivot = arr[length - 1];
int leftp = 0;
int rightp = length - 1;
while (1) {
while (arr[--rightp] > elementPivot) {
}
while (arr[++leftp] < elementPivot) {
}
if (rightp > leftp) {
swap(arr + leftp, arr + rightp);
}else{
break;
}
}
swap(arr + leftp, arr + length - 1);
quickSort(arr, leftp);
quickSort(arr + leftp, length - leftp);
}