/*************************************************************************
> File Name: qucksort.cpp
> Author: chsun
> Mail:
> Created Time: 2016年08月20日 星期六 10时13分13秒
************************************************************************/
#include<iostream>
#include<vector>
using namespace std;
//快速排序 递归实现方式
int partion(vector<int>&res,int left,int right)
{
int middle=res[left];
while(left<right)
{
while(left<right && res[right]>=middle) right--;
res[left]=res[right];
while(left<right && res[left]<=middle) left++;
res[right]=res[left];
}
res[left]=middle;
return left;
}
void quickSort(vector<int> &res,int left,int right)
{
if(left<right)
{
int middle=partion(res,left,right);
quickSort(res,left,middle-1);
quickSort(res,middle+1,right);
}
}
//快速排序 非递归实现方式
void quicksortNodigui(vector<int>&res,int left,int right)
{
int stk[100];
int top=-1;
stk[++top]=left;
stk[++top]=right;
while(top>0)
{
int r=stk[top--];
int l=stk[top--];
int mid=partion(res,l,r);
if(l<mid-1)
{
stk[++top]=l;
stk[++top]=mid-1;
}
if(mid+1<r)
{
stk[++top]=mid+1;
stk[++top]=r;
}
}
}
int main()
{
int n;
while(cin>>n)
{
if(n == 0)
break;
vector<int>p(n);
for(int i=0;i<n;i++)
cin>>p[i];
// quickSort(p,0,n-1);
quicksortNodigui(p,0,n-1);
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
cout<<endl;
}
return 0;
}
快速排序实现
最新推荐文章于 2022-05-30 12:02:59 发布