快排---非递归实现
Posted pengwang52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快排---非递归实现相关的知识,希望对你有一定的参考价值。
递归的核心是栈;可构造辅助栈实现非递归。
#include<iostream> #include <stdio.h> #include <stack> using namespace std; int partion(int* root, int low, int high) { int part = root[low]; while(low < high) { while(low<high && root[high]>part){ high--; } root[low] = root[high]; while(low<high && root[low]<=part) { low++; } root[high] = root[low]; } root[low] = part; return low; } void quickSort2(int* root, int low, int high) { stack<int> st; int k; if(low < high) { st.push(low); st.push(high); while(!st.empty()) { int j = st.top(); st.pop(); int i = st.top(); st.pop(); k = partion(root, i, j); if(i < k - 1) { st.push(i); st.push(k - 1); } if(k + 1 < j) { st.push(k + 1); st.push(j); } } } } int main() { int a[8] = {4, 2, 6, 7, 9, 5, 1, 3}; //quickSort1(a,0,7); quickSort2(a, 0, 7); for(int i = 0; i < 8; i++) { cout << a[i] << endl; } return 0; }
以上是关于快排---非递归实现的主要内容,如果未能解决你的问题,请参考以下文章
8种面试经典排序详解--选择,插入,希尔,冒泡,堆排,3种快排及非递归,归并及非递归,计数(图+C语言代码+时间复杂度)