• 快速排序(C++实现)


    参考博文链接:https://blog.csdn.net/qq_28584889/article/details/88136498

    当基准数选择最左边的数字时,那么就应该先从右边开始搜索;当基准数选择最右边的数字时,那么就应该先从左边开始搜索。不论是从小到大排序还是从大到小排序!快速排序之所比较快,因为相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次只能在相邻的数之间进行交换,交换的距离就大的多了。因此总的比较和交换次数就少了,速度自然就提高了。当然在最坏的情况下,仍可能是相邻的两个数进行了交换。因此快速排序的最差时间复杂度和冒泡排序是一样的都是O(N2),它的平均时间复杂度为O(NlogN)。

    #include <iostream>
    #include <vector>
    using namespace std;
    //快速排序(从小到大)
    vector<int> quickSort(int left, int right, vector<int>& arr)
    {
    if(left >= right)
    return {0};
    int i, j, base, temp;
    i = left, j = right;
    base = arr[left]; //取最左边的数为基准数
    while (i < j)
    {
    while (arr[j] >= base && i < j)
    j--;
    while (arr[i] <= base && i < j)
    i++;
    if(i < j)
    {
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }
    }
    //基准数归位
    arr[left] = arr[i];
    arr[i] = base;
    quickSort(left, i - 1, arr);//递归左边
    quickSort(i + 1, right, arr);//递归右边
    return arr;
    }
    //快速排序(从大到小)
    vector<int> quickSort_1(int left, int right, vector<int>& arr)
    {
    if(left >= right) //递归边界条件
    return {0};
    if(left < 0 || right >= arr.size())
    {
    cout << "error args! array bound." << endl;
    return {-1};
    }//非法输入判断,防止数组越界
    int i, j, base, temp;
    i = left, j = right;
    base = arr[left]; //取最左边的数为基准数
    while (i < j)
    {
    while (arr[j] <= base && i < j)
    j--;
    while (arr[i] >= base && i < j)
    i++;
    if(i < j)
    {
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
    }
    }
    //基准数归位
    arr[left] = arr[i];
    arr[i] = base;
    quickSort_1(left, i - 1, arr);//递归左边
    quickSort_1(i + 1, right, arr);//递归右边
    return arr;
    }

    int main()
    {
    vector<int> a,b,c,d;
    a = {2,3,1,5,6,7,9,8};
    b = {2,3,1,5,6,7,9,8};
    c = quickSort(0,7,a);
    d = quickSort_1(0,7,b);
    std::cout << c[0]<<" "<<d[0];
    }

  • 相关阅读:
    Thinkphp3.2.3如何加载自定义函数库
    mysql 字段引号那个像单引号的撇号用法
    php cli模式学习(PHP命令行模式)
    Django model 表与表的关系
    Django model 字段详解
    Django model 中的字段解释
    python系列-1 字符串操作
    nginx-匹配规则
    ansible系列3-pyYAML
    ansible系列2-常用命令
  • 原文地址:https://www.cnblogs.com/shiheyuanfang/p/13862576.html
Copyright © 2020-2023  润新知