• 堆排序 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 }
  • 相关阅读:
    etcd扩展使用
    etcd注册服务
    net core微服务构建方案
    一个简化的插件框架c#
    NSQ消息队列
    c#一些处理解决方案(组件,库)
    c#网络传输
    c#的传输组件dotnetty
    c#网络加密传输
    C++ Boost在Windows和Linux下的编译安装
  • 原文地址:https://www.cnblogs.com/max88888888/p/5743835.html
Copyright © 2020-2023  润新知