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

  • 相关阅读:
    2.4 学习总计 之 自己实现底部导航
    2.3 学习总结 之 分页查询
    2.2 学习总结 之 servlet 的两次抽取
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
    Rocket
  • 原文地址:https://www.cnblogs.com/mengjuanjuan/p/10560974.html
Copyright © 2011-2022 走看看