快速排序基本思想
第一步:找一个基准值(这里选取待排序数组中最左边的值)然后将待排序数组分成三个部分
第一部分:数据全小于基准值
第二部分:数据全等于基准值
第三部分:数据全大于基准值
第二步:将第一部分和第三部分分别进行第一步处理,直到i>=j
快速排序的代码
pair<int,int> quickHolandFlag(int a[],int l,int r)
{
int i =l-1,j=r+1,index =l;
int tmp = a[index];
while(index<j)
{
if(a[index]<tmp) swap(a[index++],arr[++i]);
else if(a[index] == tmp) index++;
else swap(a[index],a[--j]);
}
return make_pair(i,j);
}
//递归写法
void quickSortRecur(int a[],int l ,int r)
{
if(l>=r) return;
pair<int,int> p = quickHolandFlag(a,l,r);
quickSortRecur(a,l,p.first);
qucikSortRecur(a,p.second,r);
}
//非递归写法 非递归用栈来实现
void quickSort(int a[],int n)
{
stack<pair<int,int>> stk;
stk.push(make_pair(0,n-1));
while(!stk.empty())
{
pair<int,int> p = stk.top();
stk.pop();
pair<int,int> part = quickHolandFlag(a,p.first,p.second);
if(p.first < part.first)
{
stk.push(make_pair(p.first,part.first));
}
if(part.second < p.second)
{
stk.push(make_pair(part.second,p.second));
}
}
}
本文详细介绍了快速排序的基本思想和C++实现。通过选取数组最左边的值作为基准,将数组分为小于、等于和大于基准的三部分,然后递归地对第一部分和第三部分继续进行排序。提供了递归和非递归两种实现方式,非递归版使用栈来辅助完成排序过程。
472

被折叠的 条评论
为什么被折叠?



