#include <iostream>
#include <map>
#include <stack>
using namespace std;
int partaction(int *a,int left,int right)
{
int tmp=a[left];
while(left<right)
{
while(left<right&&a[right]>tmp)
{
right--;
}
if(right>left)
{
a[left++]=a[right];
}
while(left<right&&a[left]<tmp)
{
left++;
}
if(right>left)
{
a[right--]=a[left];
}
}
a[left]=tmp;
return left;
}
void q_sort1(int *arr,int left,int right)
{
if(left>=right)
{
return ;
}
int mid=partaction(arr,left,right);
q_sort1(arr,left,mid-1);
q_sort1(arr,mid+1,right);
}
void q_sort(int *arr,int left,int right)
{
stack<pair<int,int> > s;
s.push(make_pair(left,right));
pair<int,int> tmp;
while(!s.empty())
{
tmp=s.top();
s.pop();
if(tmp.first<tmp.second)
{
int mid=partaction(arr,tmp.first,tmp.second);
s.push(make_pair<int,int>(tmp.first,mid-1));
s.push(make_pair<int,int>(mid+1,tmp.second));
}
}
}
int main()
{
int arr[10]={1,2,3,5};
q_sort(arr,0,4);
for(int i=0;i<4;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}