• 快速排序 c++


    #include <iostream>
    #include <vector>
    using namespace std;
    //快速排序的核心部分就是partition,即每次都选定待排序数组A的最后一个元素为key,每一次partition后,
    //会把待排序数组分为三部分:小于key,key,大于key。p表示A的第一个元素,r表示A的最后一个元素。
    int partition(vector<int>& A,int p,int r)
    {
        int x=A[r];
        int i=p-1;
        for(int j=p;j<r;j++)
        {
            if(A[j]<=x)
            {
                i++;
                swap(A[i],A[j]);
            }
        }
        swap(A[i+1],A[r]);
        return i+1;
    }
    
    //递归调用partition,直到数组大小为1
    void quickSort(vector<int> &A,int p,int r)
    {
        if(p<r)
        {
        int q=partition(A,p,r);
        quickSort(A,p,q-1);
        quickSort(A,q+1,r);
    
        }
    }
    //主函数,这里用C++里的容器vector创建待排序向量
    int main()
    {
        vector<int> A{2,8,7,1,3,5,6,4};
        quickSort(A,0,A.size()-1);
        for(auto x:A)
            cout<<x<<" ";
    }

    下面给出以上代码的图片便于理解:

    qSort1

    (图片来自CLRS 3edition chaper7 page 172)

    快排的时间复杂度是nlogn

    qSort2

    (图片来自CLRS 3edition chaper7 page 176)

  • 相关阅读:
    ntp时钟同步
    io,进程监控
    Linux下修改主机名
    DataGuard主库增加联机日志
    external table
    linux卸载HBA卡驱动
    Oracle DataGuard延迟应用归档归档日志
    index unusable
    VBOX 克隆虚拟机
    device eth0 has different MAC address than expected,igoring
  • 原文地址:https://www.cnblogs.com/zhangzhangwhu/p/7007275.html
Copyright © 2020-2023  润新知