快排---非递归实现

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语言代码+时间复杂度)

快排---非递归实现

C++ 快排递归实现和非递归实现

C++ 快排递归实现和非递归实现

快排的递归和非递归

C和Python实现快速排序-三数中值划分选择主元(非随机)