博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
堆排序
阅读量:4635 次
发布时间:2019-06-09

本文共 819 字,大约阅读时间需要 2 分钟。

void Max_Heapify(int *a, int heap_size, int i)

{
   int left = (i<<1) + 1;
   int right = (i<<1) + 2;
   int largest = i;
   while(left<heap_size || right<heap_size)
   {
       if(left<heap_size && a[largest]<a[left])
       {
           largest = left;
       }
       if(right<heap_size && a[largest]<a[right])
       {
           largest = right;
       }
       if(i != largest)
       {
           int temp = a[largest];
           a[largest] = a[i];
           a[i] = temp;
           i = largest;
           left = (i<<1) + 1;
           right = (i<<1) + 2;
       }
       else
       {
           break;
       }
   }
}
void Build_Max_Heap(int *a, int heap_size)
{
    for(int i = heap_size / 2 - 1; i >= 0; i--)
    {
        Max_Heapify(a, heap_size, i);
    }
}
void HeapSort(int *a, int len)  //堆排序接口
{
    int heap_size = len;
    Build_Max_Heap(a,heap_size);
    for(int i = len - 1; i>=1; i--)
    {
        int temp = a[0];
        a[0] = a[i];
        a[i] = temp;
        heap_size--;
        Max_Heapify(a, heap_size, 0);
    }
}

转载于:https://www.cnblogs.com/xly0713/p/3189922.html

你可能感兴趣的文章
DIV+CSS规范命名大全集合
查看>>
求二进制中1的个数(编程之美2.1)
查看>>
hdu 4289 网络流拆点,类似最小割(可做模板)邻接矩阵实现
查看>>
接口和异常
查看>>
58前端内推笔试2017(含答案)
查看>>
写给自己的web开发资源
查看>>
Java学习笔记
查看>>
sprintf 和strcpy 的差别
查看>>
jQuery_第五章_jQuery事件和动画
查看>>
打表打表何谓打表?
查看>>
MPEG4与.mp4
查看>>
实验5
查看>>
成长轨迹44 【ACM算法之路 百炼poj.grids.cn】【字符串处理】【2799、2976、2975、2742】...
查看>>
git 下载 安装
查看>>
录制终端信息并回放
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>
Linux 文件系统及 ext2 文件系统
查看>>
复习笔记之母函数
查看>>
进军ABP第一天:ABP理论知识
查看>>