1 #include <iostream> 2 #include <cstdio> 3 #include <stack> 4 using namespace std; 5 long long re_pows(int a,int n)//递归快速乘幂 6 { 7 if(n==0) return 1; 8 long long t=re_pows(a,n/2); 9 long long ans=t*t; 10 if(n&1) ans*=a; 11 return ans; 12 } 13 long long ure_pows(int a,int n)//非递归快速乘幂 14 { 15 int i=1; 16 while(i<=n)i<<=1; 17 long long ans=1; 18 while(i>>=1) 19 { 20 ans*=ans; 21 if(n&i) ans*=a; 22 } 23 return ans; 24 } 25 int arr[100]={1,2,4,5,3}; 26 struct node 27 { 28 int l,r; 29 node(){} 30 node(int a,int b){l=a;r=b;} 31 }; 32 int part(int l,int r) 33 { 34 int i=l-1,j=l; 35 while(j<r) 36 { 37 if(arr[j]<arr[r]) 38 swap(arr[++i],arr[j++]); 39 else j++; 40 } 41 swap(arr[++i],arr[r]); 42 return i; 43 } 44 45 void re_qsort(int l,int r)//递归快速排序 46 { 47 if(l>=r) return; 48 int m=part(l,r); 49 re_qsort(l,m-1); 50 re_qsort(m+1,r); 51 } 52 53 stack<node> q; 54 void ure_qsort(int l,int r)//非递归快速排序 55 { 56 q.push(node(l,r)); 57 while(!q.empty()) 58 { 59 l=q.top().l; 60 r=q.top().r; 61 q.pop(); 62 while(l<r) 63 { 64 int m=part(l,r); 65 q.push(node(m+1,r));//把右边的保存下来 66 r=m-1; 67 } 68 } 69 } 70 int main() 71 { 72 int i,n; 73 while(cin>>n) 74 { 75 for(i=0;i<n;i++) 76 { 77 cin>>arr[i]; 78 } 79 ure_qsort(0,n-1); 80 for(i=0;i<n;i++) 81 { 82 cout<<arr[i]<<' '; 83 } 84 cout<<endl; 85 } 86 return 0; 87 }