堆排序
2015-11-18 22:38
489 查看
示意图如下:
代码如下:
代码如下:
#include<iostream> #include<iomanip> using namespace std; void keep_heap(int arr[], int i,int heap_size) { int Left = i * 2; int Right = 2 * i +1 ; int largest=i; if (Left < heap_size && arr[Left] > arr[i]) largest = Left; else largest = i; if (Right < heap_size && arr[Right] > arr[largest]) largest = Right; if (largest != i) { int t = arr[i]; arr[i] = arr[largest]; arr[largest] = t; keep_heap(arr, largest, heap_size); } } void build_heap(int arr[], int heap_size) { for (int i = heap_size / 2 - 1; i >= 1; i--) { keep_heap(arr, i, heap_size); } } void heap_sort(int arr[], int n) { int heap_size = n; build_heap(arr, heap_size); for (int i = n-1; i >= 1; i--) { int t = arr[1]; arr[1] = arr[i]; arr[i] = t; heap_size--; keep_heap(arr, 1, heap_size); } } void main() { int arr[] = { 0, 9, 5, 7, 8, 6, 2, 4, 3, 1 }; int length = sizeof(arr) / sizeof(int); for (int i = 1; i < length; i++) cout << arr[i] << " "; cout << endl; heap_sort(arr, length); for (int i = 1; i < length; i++) cout << arr[i] << " "; cout << endl; system("pause"); }
相关文章推荐
- 21.UIScrollView(滑动视图)和UIPageControl()
- JAVA 日期加减
- android开机自启动的几种方法
- HttpDns
- [面试算法题]比较二叉树异同-leetcode学习之旅(5)
- ActiveMQ 中的消息游标(Message cursors)
- [面试算法题]比较二叉树异同-leetcode学习之旅(5)
- [面试算法题]比较二叉树异同-leetcode学习之旅(5)
- iOS开发:本地通知(推送)
- python之转换源码后缀名为txt后缀名
- [面试算法题]比较二叉树异同-leetcode学习之旅(5)
- python urllib模块
- TextView的自定义字体
- JavaScript DOM编程艺术—表格的奇数行在点击时实现斑马线效果
- 基于mmap的KV数据存储实现(一)概述
- TextView和SpannableString实现图文混排的效果
- Java连接mysql
- surface
- SQL学习:SQLCookBook源代码-mysql版本(3)
- 装饰者模式