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

    Prime + Heap 简直神了 时间优化好多,顺便就把Heapsort给撸了一发

    具体看图

    Heapsort利用完全二叉树+大(小)顶锥的结构每次将锥定元素和锥最末尾的元素交换 同时大(小)顶锥元素数 -1,迭代n-1次级OK了

    我这里的是按从小到大拍的

     1 //堆排序 时间复杂度为 O(nlogn)
     2 
     3 void Swap(int *a, int i, int j)   //交换a[i] 和 a[j] 的值
     4 {
     5     int temp = a[i];
     6     a[i] = a[j];
     7     a[j] = temp;
     8 }
     9 
    10 void Heapadjust(int *a,int s,int n)     //调整父亲节点,使其满足大(小)顶锥结构 s为父亲节点下标
    11 {
    12     int temp = a[s];
    13     
    14     for(int i=2*s; i<n; i*=2)
    15     {
    16         if(i<n && a[i] < a[i+1])
    17             i++;
    18         if(temp >= a[i])
    19             break;
    20         a[s] = a[i];
    21         s = i;
    22     }
    23     a[s] = temp;
    24 }
    25 
    26 void Heapsort(int *a, int n)  //对*a 数组排序,从a[1] - a[n] 排序
    27 {
    28     for(int i=n/2; i>0; i--)
    29         Heapadjust(a,i,n);
    30     
    31     for(int i=n; i>1; i--)
    32     {
    33         Swap(a,1,i);
    34         Heapadjust(a,1,i-1);
    35     }
    36 }
  • 相关阅读:
    特殊权限
    linux文件文本查找
    vim
    11.8-下视频录视频
    10.04-VSCode-Linux编程环境搭建
    10.26-thunderbird配置
    6.20-安装Nvidia gt660ti 显卡驱动
    6.19-搭建github博客
    2.10-常用系统维护
    6.18-WizNote MD 指南
  • 原文地址:https://www.cnblogs.com/max88888888/p/5743835.html
Copyright © 2011-2022 走看看