美文网首页
非递归快排

非递归快排

作者: 不知名小号 | 来源:发表于2020-04-15 17:09 被阅读0次
#include <iostream>
#include <vector>
#include <stack>
using namespace std;
void quick_sort(vector<int> &v){
    int left = 0, right = v.size() - 1;
    stack<pair<int, int> >s;
    s.push(make_pair(left, right));
    while (!s.empty()){
        pair<int, int> t = s.top();
        s.pop();
        int left = t.first;
        int right = t.second;
        if (right <= left){
            continue;
        }
        int i = left, j = right;
        int target = v[left];
        while (i < j){
            while (i < j && v[j] >= target){
                j--;
            }
            while (i < j && v[i] <= target){
                i++;
            }
            if (i != j){
                swap(v[i], v[j]);
            }
        }
        v[left] = v[i];
        v[i] = target;
        if (left <= i - 1){
            s.push(make_pair(left, i - 1));
        }
        if (i + 1 <= right){
            s.push(make_pair(i + 1, right));
        }
    }
}
int main(){
    int n, t;
    vector<int> v;
    cin >> n;
    for (int i = 0; i < n; i++){
        cin >> t;
        v.push_back(t);
    }
    quick_sort(v);
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << " ";
    }
}

相关文章

  • 非递归快排

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 简易快排和二分查找

    1.快排 快速排序有多种实现方式,有递归和非递归,之前遇到的解法多是递归的,而且分成了两部分代码,较难理解和使用,...

  • 递归版快排

    完整代码

  • 快排递归实现

    基本思想:(分治) 先从数列中取出一个数作为key值;将比这个数小的数全部放在它的左边,大于或等于它的数全部放在它...

  • 排序算法记录

    快排递归实现 非递归实现 3.排序算法的思想: (1)冒泡排序: 是相邻元素之间的比较和交换,两重循环O(n2);...

  • JS版本 排序算法

    1.三种排序--冒泡,选择排序,快排 2.二分查找(非递归版本) 3.链表反转

  • 2018-01-23

    今天,写了快排的递归和非递归代码,写了二分查找代码,生疏了,到还有好有点提示就想起来了。 职业生涯,时刻要居安思危...

  • HJ14 字符串排序

    方法一:自带sort方法排序方法二:递归,快排

  • 二叉树遍历

    先序遍历——[递归、非递归] 中序遍历——[递归、非递归] 后序遍历——[递归、非递归] 层次遍历——[递归、非递归]

网友评论

      本文标题:非递归快排

      本文链接:https://www.haomeiwen.com/subject/wixhvhtx.html