#include<stdio.h>
#include<stack>
using namespace std;
int a[10000];
struct Node{
int l;
int r;
};
stack<Node> myStack; // for non-recursion version qSort()
// no-recursion version
void qSort(int l, int r){
Node first;
first.l = l;
first.r = r;
myStack.push(first);
while(!myStack.empty()){ // stored in stack
Node cNode = myStack.top();
myStack.pop();
int pl = cNode.l;
int pr = cNode.r;
if(pl >= pr) continue;
// one times quick sort
int tmp = a[pl];
while(pl < pr){
while(a[pr]>=tmp && pl<pr) pr--;
a[pl] = a[pr];
while(a[pl]<=tmp && pl<pr) pl++;
a[pr] = a[pl];
}
a[pl] = tmp;
Node lNode;
lNode.l = cNode.l;
lNode.r = pl-1;
myStack.push(lNode);
Node rNode;
rNode.l = pr + 1;
rNode.r = cNode.r;
myStack.push(rNode);
} // end of while
} // end of qSort()
// recursion version
void qqSort(int l, int r){
if(l >= r)return;
int pl = l;
int pr = r;
// one times quick sort
int tmp = a[pl];
while(pl < pr){
while(a[pr]>=tmp && pl<pr) pr--;
a[pl] = a[pr];
while(a[pl]<=tmp && pl<pr) pl++;
a[pr] = a[pl];
}
a[pl] = tmp;
qqSort(l, pl-1);
qqSort(pr+1, r);
}// end of qqSort()
int main(){
int i, n;
scanf("%d", &n);
for(i=0; i<n; i++){
scanf("%d", &a[i]);
}
qSort(0, n-1); // non-recursion version
//qqSort(0, n-1); // recursion version
// output the array after sorted
for(i=0; i<n; i++){
if(i>0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
qSort implemented in recursion and non-recuision version
最新推荐文章于 2020-04-24 22:40:19 发布