快排算是对冒泡的一个升级,其核心思想就是,找一个基准,达到基准右边的都比基准大,其左边的都比基准小,实现方式为,从右向左遍历 j,直到比基准小了停止,然后从左往右遍历 i,直到比基准大了停止,然后 a[i]和a[j]互换位置,重复操作,直到 i 和 j 相等了,此时a[i] 一定是小于等于基准的(如果这个你想清楚了,我觉得你可以手写快排了),然后交换基准和a[i]的位置,这就实现了基准左边都是小于基准的,基准右边都是大于基准的。
#include <stdio.h>
void quickSort(int a[],int left,int right) {
int i, j, temp;
i = left;
j = right;
if (i >= j) {
return;
}
while (i < j) {
while (i < j && a[j] >= a[left]) {
j --;
}
while (i < j && a[i] <= a[left]) {
i ++;
}
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
temp = a[i];
a[i] = a[left];
a[left] = temp;
quickSort(a,left,i - 1);
quickSort(a,i + 1,right);
}
int main() {
int a[] = {3,5,6,7,2,4,7,9,3,8};
int i, n = 10;
quickSort(a,0,n - 1);
for (i = 0; i < n; i ++) {
printf("%d ",a[i]);
}
printf("\n");
return 0;
}