时间复杂度:O(N*longN)
空间复杂度:O(logN)
基于荷兰国旗问题
//以下实现的是快排3.0版本 也就是时间复杂度为O(N*logN)
class QuickSort
{
public:
void quciksort(vector<int>&arr,int L,int R)
{
if (L>=R||arr.size()<2)
return;
//选取的随机数和最后一个交换 在main函数不要忘记加上随机种子
//srand((unsigned int)time(NULL));
int index= rand()%(R-L+1)+L;
swap(arr,R,index);
//返回等于的左右区间
vector<int>p = partition(arr,L,R);
//递归 使左边有序 右边有序
quciksort(arr,L,p[0]);
quciksort(arr,p[1],R);
}
private:
void swap(vecotr<int>&arr,int index,int right)
{
int temp = arr[index];
arr[index] = arr[right];
arr[right] = temp;
}
vector<int> quciksort(vector<int>& arr, int L, int R)
{
int standard = arr[R],less = L-1,more = R;
while(L<more)
{
if(arr[L]<standard)
swap(arr,++less,L++);
else if(arr[L] == standard)
L++;
else
swap(arr,--more,L);
}
swap(arr,R,more);
return {less,more+1};
}
};