快速排序
# 选取枢纽元
int partition(vector<int> &vi, int low, int up)
{
int pivot = vi[up];
int i = low-1;
for (int j = low; j < up; j++)
{
if(vi[j] <= pivot)
{
i++;
swap(vi[i], vi[j]);
}
}
swap(vi[i+1], vi[up]);
return i+1;
}
# 递归
void quickSort(vector<int> &vi, int low, int up)
{
if(low < up)
{
int mid = partition(vi, low, up);
//Watch out! The mid position is on the place, so we don't need to consider it again.
//That's why below is mid-1, not mid! Otherwise it will occur overflow error!!!
quickSort(vi, low, mid-1);
quickSort(vi, mid+1, up);
}
}
# 适配器
void qSort(vector<int> &vi)
{
quickSort(vi, 0, vi.size()-1);
}
# 主函数
int main()
{
int a[] = {3,5,7,9,2,3,1,0,7,5,4};
vector<int> va(a, a+11);
cout<<"Before quicksort:\n";
for(auto x:va)
cout<<x<<" ";
cout<<endl;
qSort(va);
cout<<"After quicksort:\n";
for(auto x:va)
cout<<x<<" ";
cout<<endl;
system("pause");
return 0;
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 876208453@qq.com
文章标题:快速排序
本文作者:Cai Jun
发布时间:2019-02-27, 15:28:59
最后更新:2019-02-27, 02:33:06
原始链接:http://johncaijun.github.io/2019-02-28-快速排序/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。