首页 > 编程语言 > 详细

C语言:快速排序

时间:2017-02-12 20:00:44      阅读:252      评论:0      收藏:0      [点我收藏+]

技术分享

#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);
}

 

C语言:快速排序

原文:http://www.cnblogs.com/AndyHoo/p/6391556.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!