三、快速排序
int partitions(vector<int> &num,int left,int right)
{
int key = num[left];
while(left<right)
{
while(left<right&&num[right]>=key)
right--;
num[left] = num[right];
while(left<right&&num[left]<=key)
left++;
num[right] = num[left];
}
num[left] = key;
return left;
}
void qsort(vector<int> &num,int left,int right)
{
if(left<right)
{
int key = partitions(num,left,right);
//cout<<key<<endl;
qsort(num,left,key-1);
qsort(num,key+1,right);
}
}
例子:9,8,7,1,0
- 第一趟排序(0-4)
- 0,8,7,1,*
- 0,8,7,1,9
- 完成一趟,枢轴为4
- 第二趟排序 (0-3)
- 0,8,7,1,9
- 完成一趟,枢轴为0
- 第三趟排序(1-3)
- 0,1,7,*,9
- 0,1,7,8,9
- 完成一趟,枢轴为3
- 排序基本完成
最坏情况:初始序列有序,退化为冒泡排序,时间复杂度为O(n^2)
平均时间复杂度:O(nlog n)