排序-快排

快排是一个递归的排序过程,每次递归,将当前序列的第一个元素当作中间值pivot(也可以选最右边或者随机),把比pivot小的放左边,比pivot大的放右边,再依次对左边的序列和右边的序列分别排序。 
vector<int> MySort(vector<int>& arr) {
        // write code here
        int n = arr.size();
        if(n < 2){
            return arr;
        }
        QuickSort(arr,0,n-1);
        return arr;
    }

    void QuickSort(vector<int>& arr, int l, int r){
        if(l >= r){
            return;
        }
        int pivot = arr[l];
        int lc = l,rc = r;
        while(lc < rc){
            while(lc < rc && arr[rc] > pivot){
                rc--;
            }
            if(lc < rc){
                arr[lc] = arr[rc];
                lc++;
            }
            while(lc < rc && arr[lc] <= pivot){
                lc++;
            }
            if(lc < rc){
                arr[rc] = arr[lc];
                rc--;
            }
        }
        arr[lc] = pivot;
        QuickSort(arr,l,lc-1);
        QuickSort(arr,lc+1,r);
    }
posted @ 2023-02-18 16:45  重新出发123  阅读(23)  评论(0)    收藏  举报