HeapSort implementation (Introduction to Algorithms)

原创 2011年01月10日 14:11:00


// push down heap element data[index] in data[0..end]
// array index start with 0 instead of 1 in CLR
void max_heapify(vector<int> &data, int end, int curr_root)
{
    int left_child_idx = curr_root * 2 + 1;
    int right_child_idx = curr_root * 2 + 2;
    int largest_index = curr_root;
    if(left_child_idx <= end && data[largest_index] < data[left_child_idx])
        largest_index = left_child_idx;
    if(right_child_idx <= end && data[largest_index] < data[right_child_idx])
        largest_index = right_child_idx;

    if(largest_index != curr_root)
    {
        std::swap(data[largest_index], data[curr_root]);
        max_heapify(data, end, largest_index);
    }
}

 

/*

index >= size/2 are all leaves, because the child index (size/2 * 2 + 1) is out of bound,

so we can start build heap from the leave nodes

*/

 

 

// make array data[0..end] into a heap
void build_heap(vector<int> &data, int end)
{
    for(int idx = data.size() / 2; idx >= 0; --idx)
        max_heapify(data, end, idx);
}

// 0) heap_size = data.size() - 1;
// 1) make array data[0..heap_size] into a heap
// 2) swap data[0] (max element) to the end
// 3) decrease heap size by 1
// 4) goto 1)
void heapsort(vector<int> &data)
{
    int heap_size = data.size() - 1;
    build_heap(data, heap_size);
    for(int idx = data.size()-1; idx >= 1; --idx)
    {
        std::swap(data[0], data[idx]);
        heap_size--;
        max_heapify(data, heap_size, 0);
    }
}

Github上的1000多本免费电子书重磅来袭!

这个GIthub库的免费电子书资源绝对值得你拥有,赶紧收藏吧! 以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了。 瞥一眼下面的书籍分类目...
  • napoleonjk
  • napoleonjk
  • 2014年08月11日 14:31
  • 11812

HDU 5532 Almost Sorted Array(最长非递减子序列 模板题)——2015ACM/ICPC亚洲区长春站

HDU 5532 Almost Sorted Array(最长非递减子序列 模板题)——2015ACM/ICPC亚洲区长春站
  • queuelovestack
  • queuelovestack
  • 2015年11月01日 18:42
  • 1087

算法导论(Introduction to Algorithms)之堆排序(C语言实现)

源码下载地址: http://download.csdn.net/detail/mr_dodo/4962237 堆排序其重要思想,是保证数组最大堆或最小堆的性质(除根节点以外的每个结点i,均有...
  • Mr_dodo
  • Mr_dodo
  • 2013年01月05日 17:13
  • 1490

算法导论(Introduction to Algorithms)之算法入门(插入排序与合并排序C语言实现)

源码下载地址:http://download.csdn.net/detail/mr_dodo/4938878 插入排序: 其算法时间复杂度为C1*n2,C1为一个与n无关的系数,即其算...
  • Mr_dodo
  • Mr_dodo
  • 2012年12月28日 17:29
  • 1230

introduction to algorithms sorting lesson_6 Counting sort (计数排序)

计数排序 可在
  • hgzhgzhgz
  • hgzhgzhgz
  • 2014年09月22日 15:54
  • 272

Solution for Introduction to Algorithms (3rd Edition) Exercise 26.4-2

Exercise 26.4-2     Show how to implement the generic push-relabel algorithms using O(V)  time per ...
  • jwj070524
  • jwj070524
  • 2013年04月12日 16:53
  • 1774

每日一题(4)——动态规划《Introduction to Algorithms》总结篇

概述 同分治法一样动态规划是通过组合子问题的解而解决整个问题的 动态规划的4个步骤: 1.描述最优解结构; 2.递归定义最优解的值; 3.按自底向上方式计算最优解; ...
  • Aiphis
  • Aiphis
  • 2015年08月14日 15:29
  • 204

麻省理工学院《算法导论》(MIT - Introduction to Algorithms) 视频教学下载地址

ed2k://|file|%5BMIT%E7%AE%97%E6%B3%95%E5%AF%BC%E8%AE%BA.%E8%A7%86%E9%A2%91%5D.1.ocw-6.046-07sep2005-...
  • Shan_mei
  • Shan_mei
  • 2013年05月23日 21:11
  • 1550

Introduction to Algorithms 算法导论 第1章 基础知识 学习笔记及习题解答

什么是算法     定义良好的计算过程,取一个或者一组值作为输入,产生一个或一组输出值。 1.1-1 给出一个真实世界的例子,其中包括着下列的某种计算问题:排序,确定多矩阵相乘的最佳顺序,...
  • cppgp
  • cppgp
  • 2011年12月29日 02:05
  • 1377

[Introduction to Algorithms 学习笔记] 单源最短路径

可以解决那些问题?一般性的问题叙述已知一个带权重的有向图G=(V,E) 和权重函数 ω:E→R (该权重函数将有向图中的每条边)映射他的权重。图中任一路径 p= ...
  • hepangda
  • hepangda
  • 2017年05月22日 19:44
  • 148
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HeapSort implementation (Introduction to Algorithms)
举报原因:
原因补充:

(最多只允许输入30个字)