qSort implemented in recursion and non-recuision version

来源:互联网 发布:ubuntu更新软件的方法 编辑:程序博客网 时间:2024/05/16 07:56
#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 versionvoid qSort(int l, int r){Node first;first.l = l;first.r = r;myStack.push(first);while(!myStack.empty()){ // stored in stackNode cNode = myStack.top();myStack.pop();int pl = cNode.l;int pr = cNode.r;if(pl >= pr) continue;// one times quick sortint 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 versionvoid qqSort(int l, int r){if(l >= r)return;int pl = l;int pr = r;// one times quick sortint 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 sortedfor(i=0; i<n; i++){if(i>0) printf(" ");printf("%d", a[i]);}printf("\n");return 0;}

0 0