快排---非递归实现

牧云@^-^@ 提交于 2019-12-02 01:48:29

递归的核心是栈;可构造辅助栈实现非递归。

#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;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!