首页 > 技术文章 > C语言:快速排序

AndyHoo 2017-02-12 19:05 原文

#include <stdio.h>
void printArr(int arr[],int len ) {
    for(int i = 0 ; i<len; i++) {
        printf("   %d", arr[i]);
    }
    printf("\n");
}

int quicksort(int arr[], int left, int right) {
    printf("左%d 右%d\n",left,right);
    if(left < right) {
        // 定位最左
        int key = arr[left];
        int i = left;
        int j = right;
        while(i < j) {
            // 右边大的换左边来
            while(i < j && arr[j] > key) {
                // 高标左移←
                j--;
            }
            if (arr[i] != arr[j]) {
                // 高位:小的往左边拉
                arr[i] = arr[j];
            }
            printf("i=%d <-- j=%d:\t",i,j);
            printArr(arr, 5);

            // 左边小的换右边去
            while(i < j && arr[i] < key) {
                // 低标右移→
                i++;
            }
            if (arr[i] != arr[j]) {
                // 地位:大的往右边拉
                arr[j] = arr[i];
            }

            printf("i=%d --> j=%d:\t",i,j);
            printArr(arr, 5);
        }
        arr[i] = key;
        printf("arr[%d] <-- %d:\t",i,key);
        printArr(arr, 5);

        quicksort(arr,left,i-1);
        quicksort(arr,i+1,right);
    }
}


//--------------------------------------------
main() {
    int a[] = {3,4,5,1,2};
    printArr(a,5);

    quicksort(a, 0, 4);

    printArr(a,5);
}

 

推荐阅读