• 快排非递归算法


    #include<bits/stdc++.h>
    using namespace std;
    const int maxn=1010;
    int getP(int num[],int left,int right){
        int temp=num[left];
        while(left<right){
            while(left<right&&num[right]>=temp){
                right--;
            }
            num[left]=num[right];
            while(left<right&&num[left]<=temp){
                left++;
            }
            num[right]=num[left];
        }
        num[left]=temp;
        return left;
    }
    void quicksort(int num[],int left,int right){
        if(left<right){
        int pivot=getP(num,left,right);
    /**  递归实现
         quicksort(num,left,pivot-1);
        quicksort(num,pivot+1,right);
    */
        stack<int> st;
        st.push(left);
        st.push(right);
        while(!st.empty()){
            int p=st.top();
            st.pop();
            int q=st.top();
            st.pop();
            pivot=getP(num,q,p);
            if(q<pivot-1){
                st.push(left);
                st.push(pivot-1);
            }
            if(p>pivot+1){
                st.push(pivot+1);
                st.push(right);
            }
        }
    }
    }
    int main(){
        int num[maxn];
        int n;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>num[i];
        }
        quicksort(num,0,n-1);
        for(int i=0;i<n;i++){
            cout<<num[i]<<" ";
        }
        cout<<endl;
    }

    原理:

    利用栈循环保存子区间的边界,然后弹出边界找中枢pivot

  • 相关阅读:
    3.10上午学习内容
    计算机网络基础
    2017.3.30-morning
    2017.3.29-afternoon
    2017.3.29-morning
    2017.3.28-afternoon
    2017.3.28-morning
    2017.3.27-afternoon
    2017.3.27-morning
    2017.3.24-morning
  • 原文地址:https://www.cnblogs.com/dreamzj/p/15968923.html
Copyright © 2020-2023  润新知