快排算是對冒泡的一個升級,其核心思想就是,找一個基準,達到基準右邊的都比基準大,其左邊的都比基準小,實現方式爲,從右向左遍歷 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;
}