zoukankan      html  css  js  c++  java
  • 快速排序的递归遍历和非递归遍历

    #include <iostream>
    #include <vector>
    #include <stack>
    #include <time.h>
    using namespace std;

    //快速排序的递归实现和非递归实现
    void QuickSortNormal(vector<int>& arr, const int left, const int right)
    {
    if (left >= right)
    {
    return;
    }
    int i = left;
    int j = right;
    int povit = arr[left];
    while (i < j)
    {
    while (povit <= arr[j] && i < j)
    {
    j--;
    }
    while(povit >= arr[i] && i < j)
    {
    i++;
    }
    if (i < j)
    {
    swap(arr[i], arr[j]);
    }
    }
    swap(arr[left], arr[j]);
    QuickSortNormal(arr, left, j-1);
    QuickSortNormal(arr, j+1, right);

    }

    //快排的非递归版本实现
    void QuickSortNonRes(vector<int> &arr)
    {
    stack<pair<int, int>> s;
    int left = 0;
    int right = arr.size()-1;
    s.push(make_pair(left, right));
    while (!s.empty())
    {
    pair<int, int> p = s.top();
    s.pop();
    left = p.first;
    right = p.second;

    int i = p.first;
    int j = p.second;
    int povit = arr[left];
    while (i < j)
    {
    while (povit <= arr[j] && i < j)
    {
    j--;
    }
    while (povit >= arr[i] && i < j)
    {
    i++;
    }
    if (i < j)
    {
    swap(arr[i], arr[j]);
    }
    }
    swap(arr[left], arr[j]);
    if (left < j-1)
    {
    s.push(make_pair(left, j-1));
    }
    if (j+1 < right)
    {
    s.push(make_pair(j+1, right));
    }

    }
    }


    int main()
    {
    srand((unsigned int)time(NULL));
    vector<int> arr(10);
    for (int i = 0; i < 10; i++)
    {
    arr[i] = rand()%100 + 1;
    }
    QuickSortNonRes(arr);
    for (int i = 0; i < 10; i++)
    {
    cout << arr[i] << " ";
    }
    cout << endl;
    system("pause");
    return 0;
    }

  • 相关阅读:
    Codeforces Round #522(Div. 2) C.Playing Piano
    zstu月赛 招生
    Codeforces Round #519 D
    RMQ[区间最值查询] 算法
    Codeforces #364 (Div. 2) D. As Fa(数学公式推导 或者二分)
    尺取法
    Codeforces #366 (Div. 2) D. Ant Man (贪心)
    Codeforces #366 Div. 2 C. Thor (模拟
    裴蜀定理
    CF850 E. Random Elections
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/10560974.html
Copyright © 2011-2022 走看看