快速排序非递归形式的C++实现

362 阅读1分钟

快速排序非递归形式的C++实现

#include <iostream>
#include<vector>
#include<stack>
using namespace std;

void func1(vector<int> &arr,int lft,int rht,int &mid)
{
    mid=lft;
    int pivot=arr[mid];
    int temp=lft+1;
    for(int i=lft+1;i<=rht;i++)
    {
        if(arr[i]<pivot)
        {
            swap(arr[temp++],arr[i]);
        }
    }
    temp--;
    swap(arr[temp],arr[mid]);
    mid=temp;
}

void quicksort(vector<int> &arr)
{
    int lft=0,rht=arr.size()-1;
    int mid;
    stack<int> st;
    st.push(lft);
    st.push(rht);
    while(!st.empty())
    {
        rht=st.top();
        st.pop();
        lft=st.top();
        st.pop();
        func1(arr,lft,rht,mid);
        if(lft<mid-1)
        {
            st.push(lft);
            st.push(mid-1);
        }
        if(mid+1<rht)
        {
            st.push(mid+1);
            st.push(rht);
        }
    }
}

int main() {
    //int a;
    //cin >> a;
    vector<int> arr{2,3,1,5,6,4,7};
    quicksort(arr);
    for(auto a:arr)cout<<a<<" ";
    
}
``