面試官讓你手寫快排

快排算是對冒泡的一個升級,其核心思想就是,找一個基準,達到基準右邊的都比基準大,其左邊的都比基準小,實現方式爲,從右向左遍歷 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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章