#include<iostream>
#include<vector>
#include<stack>
using namespace std;
vector<int> a;
class node{
public:
int low;
int high;
};
int parition(int low,int high)
{
int p=a[low];
int i=low;
int j=high;
if(j>i)
{
while(j>i)
{
while(j>i&&a[j]>p)
j--;
while(j>i&&a[i]<=p)
i++;
if(j>i)
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
int temp=a[low];
a[low]=a[i];
a[i]=temp;
return i;
}
}
void q_sort()
{
stack<node> s;
node now;
now.low=0;
now.high=a.size()-1;
s.push(now);
while(!s.empty())
{
node now_n=s.top();
s.pop();
int p=parition(now_n.low,now_n.high);
if(p-now_n.low>1)
{
node now_t;
now_t.low=now_n.low;
now_t.high=p-1;
s.push(now_t);
}
if(now_n.high-p>1)
{
node now_t;
now_t.low=p+1;
now_t.high=now_n.high;
s.push(now_t);
}
}
}
int main()
{
int n;
int t;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>t;
a.push_back(t);
}
q_sort();
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}
快速排序非递归实现
最新推荐文章于 2023-06-11 23:26:34 发布