快排c++实现

源自邓俊辉数据结构

#include <iostream>
#include <vector>
using namespace std;
void quickSort(int, int);
int partition(int, int);
int partition2(int, int);
//void swap(int&, int&);
vector<int> vec{3,2,1,8,6,5,10};
int main()
{   
    int size = vec.size();
    quickSort(0, size);
    for (int x:vec) cout<<x<<' ';
    return 0;
}
void quickSort(int lo, int hi){
    if(hi-lo < 2) return;
    int pivot = partition2(lo, hi-1);
    quickSort(lo, pivot);
    quickSort(pivot+1, hi);
}
int partition(int lo, int hi){
    swap(vec[lo], vec[(lo+(rand())%(hi-lo+1))]);
    int pivot = vec[lo];
    while(lo<hi){
        while(lo<hi && pivot<=vec[hi])
            hi--;
        vec[lo] = vec[hi];
        while(lo<hi && vec[lo]<=pivot)
            lo++;
        vec[hi] = vec[lo];
    }
    vec[lo] = pivot;
    return lo;
}
int partition2(int lo, int hi){
    swap(vec[lo],vec[(lo+rand()%(hi-lo+1))]);
    int pivot = vec[lo],mi=lo;
    for(int k=lo+1;k<=hi;k++){
        if(vec[k] < pivot) swap(vec[++mi], vec[k]);
    }
    swap(vec[lo], vec[mi]);
    return mi;
}

partition()轴点选取方方法
这里写图片描述
partition2()轴点选取方法
这里写图片描述

猜你喜欢

转载自blog.csdn.net/yb564645735/article/details/81104497