面试官让你手写快排

快排算是对冒泡的一个升级,其核心思想就是,找一个基准,达到基准右边的都比基准大,其左边的都比基准小,实现方式为,从右向左遍历 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;
}
发布了459 篇原创文章 · 获赞 298 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/HeZhiYing_/article/details/105005138