#include <iostream>#include<vector>using namespacestd;//Recursive versionvoidQuickSort (intA[],intSintt) { if(S >=t) { return; } inti =s; intj = T +1; while(true){ Do{i++; } while(A[i] < a[s]&&i<t); Do{J--; } while(A[j] > a[s]&&j>s); if(I <j) {Std::swap (A[i], a[j]); } Else{Std::swap (A[s], a[j]); Break; }} quickSort (A, S, J-1); QuickSort (A, J+1, t);}//non-recursive versionclassnode{ Public: intStart =0; intEnd =0; Node (int_start,int_end) {Start=_start; End=_end; }};voidQuickSort (intA[],node node0) {Vector<node>STACK; ints =-1; intt =-1; Stack.push_back (NODE0); while(true){ if(Stack.empty ()) {return; } Else{node TMP=Stack.back (); Stack.pop_back (); S=Tmp.start; T=Tmp.end; if(S >=t) { Continue; } } inti =s; intj = T +1; while(true){ Do{i++; } while(A[i]<a[s] && i <t); Do{J--; } while(A[j] > A[s] && j>s); if(I <j) {Std::swap (A[i], a[j]); } Else{Std::swap (A[s], a[j]); Break; }} stack.push_back (Node (s,j-1)); Stack.push_back (Node (j+1, T)); }}intMain () {intA[] = {-1, -2, -3, -4, -5 }; QuickSort (A,0,4);//Recursive intB[] = {-1, -2, -3, -4, -5 }; QuickSort (B, node (0,4)); cout<<"Recursive"<<Endl; for(inti =0; I <5; ++i) {cout<< A[i] <<Endl; } cout<<"Non-recursive"<<Endl; for(inti =0; I <5; ++i) {cout<< B[i] <<Endl; } System ("Pause");}
Recursive and non-recursive C + + for fast rows