9种排序算法性能之比较之----堆排序
来源:互联网 发布:韦德2017常规赛数据 编辑:程序博客网 时间:2024/04/28 21:34
(六)堆排序
实现代码:
/*!
* \brief from wiki
* \param d
* \param ind
* \param len
*/
void sift(int d[], int ind, int len)
{
//#置i为要筛选的节点#%
int i = ind;
//#c中保存i节点的左孩子#%
int c = i * 2 + 1; //#+1的目的就是为了解决节点从0开始而他的左孩子一直为0的问题#%
while(c < len)//#未筛选到叶子节点#%
{
//#如果要筛选的节点既有左孩子又有右孩子并且左孩子值小于右孩子#%
//#从二者中选出较大的并记录#%
if(c + 1 < len && d[c] < d[c + 1])
c++;
//#如果要筛选的节点中的值大于左右孩子的较大者则退出#%
if(d[i] > d[c]) break;
else
{
//#交换#%
int t = d[c];
d[c] = d[i];
d[i] = t;
//#重置要筛选的节点和要筛选的左孩子#%
i = c;
c = 2 * i + 1;
}
}
return;
}
void heap_sort(int d[], int n)
{
//#初始化建堆, i从最后一个非叶子节点开始#%
for(int i = (n - 2) / 2; i >= 0; i--)
sift(d, i, n);
for(int j = 0; j < n; j++)
{
//#交换#%
int t = d[0];
d[0] = d[n - j - 1];
d[n - j - 1] = t;
//#筛选编号为0 #%
sift(d, 0, n - j - 1);
}
}
/*!
* 堆排序
*/
double HeapSort(int *data, int size)
{
double res = 0;
//EClock<> Ek;
heap_sort(data, size);
//res = Ek.microsecond();
return res;
}
测试结果:单位:us
0 0
- 9种排序算法性能之比较之----堆排序
- 9种排序算法性能之比较之----插入排序
- 9种排序算法性能之比较之----选择排序
- 9种排序算法性能之比较之----冒泡排序
- 9种排序算法性能之比较之----快速排序
- 9种排序算法性能之比较之----归并排序
- 9种排序算法性能之比较之----计数排序
- 9种排序算法性能之比较之----希尔排序
- 9种排序算法性能之比较之----基数排序
- 常用排序算法之性能比较
- 数据结构之排序算法性能分析比较
- 《面试之排序算法性能比较》
- 排序算法之堆排序
- 排序算法之堆排序
- 排序算法之 堆排序
- 排序算法之堆排序
- 排序算法之堆排序
- 排序算法之堆排序
- SQL 常用语句
- Linux中断(interrupt)子系统之二:arch相关的硬件封装层
- 现在的一个IT工作者最头疼的就是加班
- 《打造七星级团队》观后感
- 我眼中的产品经理(1)——如何做竞争分析
- 9种排序算法性能之比较之----堆排序
- Git 教程
- [Linux]常用命令
- Linux中断(interrupt)子系统之三:中断流控处理层
- 程序员面试100题之八:不要被阶乘吓倒(二进制表示中最低位1的位置 )
- xmpp学习要点记录
- MFC为对话框添加背景图片
- 使用DsoFramer构建,内嵌Excel的WinForm程序
- Linux中断(interrupt)子系统之四:驱动程序接口层 & 中断通用逻辑层