码迷,mamicode.com
首页 > 其他好文 > 详细

快排---非递归实现

时间:2019-10-23 09:36:21      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:oid   str   quick   i++   tac   stream   ++   include   mes   

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

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

 

快排---非递归实现

标签:oid   str   quick   i++   tac   stream   ++   include   mes   

原文地址:https://www.cnblogs.com/pengwang52/p/11724098.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!