递归:
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int p[1000005],n;
void quickSort(int start,int end){
if(start>=0&&start<end&&end<n){
int i = start;
int j = end;
int x = p[start];
while(i!=j){
while(i<j&&p[j]>=x) j--;
if(i<j) p[i++] = p[j];
while(i<j&&p[i]<=x) i++;
if(i<j) p[j--] = p[i];
}
p[i] = x;
quickSort(start,i-1);
quickSort(i+1,end);
}
}
int main(int argc, char** argv) {
while(cin>>n){
for(int i=0;i<n;i++){
cin>>p[i];
}
quickSort(0,n-1);
int cnt = 0;
for(int i=0;i<n;i++){
cnt++;
if((cnt%=100)==0){
cout<<p[i]<<endl;
}else{
cout<<p[i]<<" ";
}
}
cout<<endl;
}
return 0;
}
栈
#include <iostream>
#include <stack>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int n,a[1000005];
int quick_Sort(int i,int j){
int x = a[i];
while(i<j){
while(i<j&&a[j]>=x)
j--;
a[i] = a[j];
while(i<j&&a[i]<=x)
i++;
a[j] = a[i];
}
a[i] = x;
return i;
}
void quickSort(int start,int end){
stack<int> st;
st.push(end);
st.push(start);
while(!st.empty()){
int l = st.top();
st.pop();
int r = st.top();
st.pop();
int k = quick_Sort(l,r);
if(l<k-1){
st.push(k-1);
st.push(l);
}
if(r>k+1){
st.push(r);
st.push(k+1);
}
}
}
int main(int argc, char** argv) {
while(cin>>n){
for(int i=0;i<n;i++){
cin>>a[i];
}
quickSort(0,n-1);
int cnt = 0;
for(int i=0;i<n;i++){
cnt++;
if((cnt%=100)==0){
cout<<a[i]<<endl;
}else{
cout<<a[i]<<" ";
}
}
cout<<endl;
}
return 0;
}