堆排序
2015-12-06 23:15
357 查看
<span style="font-size:18px;">堆排序可以分为两步,第一步将待排序序列构建为一个大顶堆;第二步将每个最大值的根结点与末尾元素交换,并将剩余元素重新调整为大顶堆。</span>
</pre><pre name="code" class="html">#include <iostream> #include <cstdlib> #include <vector> using namespace std; #define random(x) (rand()%x) void heap_adjust(vector<int>& nums, int index, int length) { for(int i = 2 * index; i <= length; i *= 2) { int temp = nums[index]; if(i < length && nums[i] < nums[i+1]) i++; if(temp >= nums[i]) break; nums[index] = nums[i]; nums[i] = temp; index = i; } } void heap_sort(vector<int>& nums) { int len = nums.size() - 1; for(int i = len / 2; i > 0; i--) { heap_adjust(nums, i, len); } for(int i = len; i > 1; i--) { int temp = nums[1]; nums[1] = nums[i]; nums[i] = temp; heap_adjust(nums, 1, i - 1); } } void print_num(vector<int>& nums) { int len = nums.size(); for(int i = 1; i < len; i++) cout << nums[i] << ' '; cout << endl; } int main() { vector<int> nums; nums.push_back(0); for(int i = 0; i < 10; i++) { int num = random(10); nums.push_back(num); } print_num(nums); heap_sort(nums); print_num(nums); return 0; }
相关文章推荐
- Qtablewidget 无法获取单元格的值
- 检查点队列浅析
- 如何修改OpenCV源码并调试
- 项目报告(最终版)
- 第二百四十八天 how can I 坚持
- 利用svn的blame功能查出代码的每一行是谁写/改的
- 安装 kali live usb
- dede之瀑布流添加心得
- SVM(一)问题的提出
- Android群英传之Android控件建构与自定义控件详解知识点总结
- java 多线程 CountDownLatch用法
- eclipse_jee启动tomcat无法访问tomcat首页,但项目首页却可以打开
- 如何实现arcgis图层属性字段物理顺序的修改
- Java中关于先有鸡还是先有蛋的问题----Class&Object
- VS2008 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
- Word中使用通配符
- 关于flexpaper不能读取web应用外的swf文件解决方案
- Android开发日记(六)
- Javascript操作DOM常用API总结
- 2015第49周日