快排

快速排序主要思路
通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序。
上代码

int patition(vector<int>& arr, int left, int right){
    int i = left - 1;
    int flag = arr[right];//
    for (int j = left; j < right; j++){
        if (arr[j] <= flag){//比flag小的,都放到前面去
            int tmp = arr[++i];
            arr[i] = arr[j];
            arr[j] = tmp;
        }
    }
    arr[right] = arr[++i];
    arr[i] = flag;//这里一交换 比flag大的,就放到后面去了
    return i;//返回flag的位置
}

void quicksortHelp(vector<int>& arr, int left, int right){
    if (left < right){
        int q = patition(arr, left, right);
        quicksortHelp(arr, left, q - 1);
        quicksortHelp(arr, q + 1, right);
    }
}

void quicksort(vector<int> &arr){
    quicksortHelp(arr, 0, arr.size() - 1);
}
posted @ 2021-01-14 21:14  传说中的水牛  阅读(90)  评论(0编辑  收藏  举报