源自邓俊辉数据结构
#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()
轴点选取方法