标签:right 递归 int st 快排 算法 num push left
#include<bits/stdc++.h> using namespace std; const int maxn=1010; int getP(int num[],int left,int right){ int temp=num[left]; while(left<right){ while(left<right&&num[right]>=temp){ right--; } num[left]=num[right]; while(left<right&&num[left]<=temp){ left++; } num[right]=num[left]; } num[left]=temp; return left; } void quicksort(int num[],int left,int right){ if(left<right){ int pivot=getP(num,left,right); /** 递归实现 quicksort(num,left,pivot-1); quicksort(num,pivot+1,right); */ stack<int> st; st.push(left); st.push(right); while(!st.empty()){ int p=st.top(); st.pop(); int q=st.top(); st.pop(); pivot=getP(num,q,p); if(q<pivot-1){ st.push(left); st.push(pivot-1); } if(p>pivot+1){ st.push(pivot+1); st.push(right); } } } } int main(){ int num[maxn]; int n; cin>>n; for(int i=0;i<n;i++){ cin>>num[i]; } quicksort(num,0,n-1); for(int i=0;i<n;i++){ cout<<num[i]<<" "; } cout<<endl; }
原理:
利用栈循环保存子区间的边界,然后弹出边界找中枢pivot
标签:right,递归,int,st,快排,算法,num,push,left 来源: https://www.cnblogs.com/dreamzj/p/15968923.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。