美文网首页
快速排序

快速排序

作者: 安知253 | 来源:发表于2020-05-12 20:20 被阅读0次
    #include <stdio.h>
    #include <stdlib.h>
    #define INT "%d\n"
    void swap(int *a,int *b);
    void quick_sort(int *arr,int left,int right);
    //解释说明:快速排序思维,分而治之策略,交换位置
    int main()
    {
        int arr[] = {22,5,10,29,12,3,99,56};
        int size = sizeof(arr)/sizeof(arr[0]);
        if(size > 1){
            quick_sort(arr,0,size-1);
        }
        for (int i = 0; i < size; ++i) {
            printf(INT,arr[i]);
        }
        return 0;
    }
    
    void swap(int *a,int *b){
        int tmp = *a;
        *a = *b;
        *b = tmp;
    }
    
    void quick_sort(int *arr,int left,int right){
        //{22,5,10,29,12,3,99,56}
        //以22为基准,跟56比较,比56小,则往右right--,直到3比22小,交换left和right的值,交换完left+1
        //结果:{3,5,10,29,12,22,99,56}
        //继续左边的跟22比较,如果比22大,放右边,5比22小,left++,直到29,交换left和right的值,交换完right-1
        int i = left;
        int j = right;
        int middle = arr[left];
        if (left >= right)  //如果low >= high说明排序结束了
        {
            return ;
        }
        while(left < right){
            while(middle <= arr[right] && left < right){
                --right;
            }
            if(middle > arr[right]){
                swap(&arr[left],&arr[right]);
                ++left;
            }
            while(middle >= arr[left] && left > right){
                --left;
            }
            if(middle < arr[left]){
                swap(&arr[right],&arr[left]);
                --right;
            }
        }
        quick_sort(arr,i,left-1);
        quick_sort(arr,left+1,j);
    }
    

    相关文章

      网友评论

          本文标题:快速排序

          本文链接:https://www.haomeiwen.com/subject/ssvinhtx.html