不稳定、时间复杂度O(nlogn) 空间复杂度 O(n)
#include<stdio.h>
int Partition(int a[], int low, int high) {
int pivotkey = a[low];
while (low < high) { //一趟的排序
while ((low < high) && (a[high] > pivotkey)) {
--high; //从右侧找到第一个比pivotkey小的值
}
a[low] = a[high]; //寻找到其值,交换之
while ((low < high) && (a[low] < pivotkey)) {
++low; //从左侧找到第一个比pivotkey大的值
}
a[high] = a[low]; //找到,交换之
}
a[low] = pivotkey;
return low;
}
void QuickSort(int a[], int low, int high) {
int x = 0;
if (low < high) {
x = Partition(a, low, high);
QuickSort(a, low, x-1); //排序左半部分
QuickSort(a, x+1, high); //排序右半部分
}
}
int main() {
int i = 0;
int a[] = {1, 2, 3, 5, 4, 78, 56, 9, 87, 10};
printf("排序前: ");
for (i = 0; i < sizeof(a)/sizeof(a[0]); i++)
printf("%d ", a[i]);
printf("\n");
QuickSort(a, 0, sizeof(a)/sizeof(a[0])-1);
printf("排序后: ");
for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}