非递归实现快速排序的方法和递归类似,其实所有的递归程序都能写成非递归的形式,只要将隐式的栈改成显示的栈即可。
void swap(int &in1, int &in2) { int tmp = in1; in1 = in2; in2 = tmp; } int qsort_partition(int A[], int q, int r) { int i, j, k = A[r]; for (i = q, j = q-1; i < r; i++) { if (A[i] < k) { swap(A[++j], A[i]); } } swap(A[++j], A[r]); return j; } void qsort(int A[], int N) { if (A && N > 0) { stack<int> stk; stk.push(0); stk.push(N-1); while (!stk.empty()) { int l, r; r = stk.top(); stk.pop(); l = stk.top(); stk.pop(); if (l < r) { int idx = qsort_partition(A, l, r); stk.push(l); stk.push(idx-1); stk.push(idx+1); stk.push(r); } } } }