zoukankan      html  css  js  c++  java
  • 堆排序

    堆排序:

    n*log(n)的时间复杂度, 非稳定排序,原地排序。

    它的思想是利用的堆这种数据结构,堆可以看成一个完全二叉树,所以在排序中比较的次数可以做到很少。

    加上他也是原地排序,不需要申请额外的空间,效率也不错。

    堆的重要特点是每一次循环都会建立新的最大或最小堆。

    #include <iostream>
    
    using namespace std;
    
    void duisort1(int a[],int i,int n)
    {
        int large=i;
        int left=2*i+1,right=left+1;
        if(left<n&&a[left]>a[i])
            large=left;
        if(right<n&&a[right]>a[large])
            large=right;
        if(large!=i)
        {
            swap(a[large],a[i]);
            duisort1(a,large,n);
        }
    }
    
    void duisort2(int a[],int n)
    {
        int i;
        for(i=n/2-1;i>=0;i--)
            duisort1(a,i,n);
        for(i=n-1;i>0;i--)
        {
            swap(a[i],a[0]);
            duisort1(a,0,i);
        }
    }
    int main()
    {
        int a[]={9,5,1,3,4,7,5};
        duisort2(a,7);
        for(int i:a)
        {
            cout<<i;
        }
        return 0;
    }
  • 相关阅读:
    操作系统典型调度算法
    C++ volatile 关键字
    vue class绑定 组件
    yarn 基本用法
    vscode 插件安装以及首选项配置
    git 多人协作
    git Feature分支
    git Bug分支
    git 分支策略
    git 解决冲突
  • 原文地址:https://www.cnblogs.com/home123/p/7291822.html
Copyright © 2011-2022 走看看