排序算法---堆排序
2016-10-19 16:49
141 查看
1.简介
建立一个最大堆(线性时间)
执行N-1次下滤操作,每次下滤将堆的最后一个元素同第一个元素进行交换。
时间复杂度为:O(NlogN)
2.实现
建立一个最大堆(线性时间)
执行N-1次下滤操作,每次下滤将堆的最后一个元素同第一个元素进行交换。
时间复杂度为:O(NlogN)
2.实现
#define LeftChild(i) (2*(i)+1) void PercDown(ElementType A[], int i, int N) { int Child; ElementType Tmp; for (Tmp = A[i]; LeftChild(i) < N;i = Child) { Child = LeftChild(i); if (Child != N-1 && A[Child +1] > A[Child]) { Child++; } if (Tmp < A[Child]) { A[i] = A[Child]; } else break; } A[i] = Tmp; } void Swap(ElementType *a, ElementType *b) { ElementType tmp = *a; *a = *b; *b = tmp; } void Heapsort(ElementType A[], int N) { int i; for (i = N / 2; i >= 0; i--) { PercDown(A, i, N); } for (i = N - 1; i > 0; i--) { Swap(&A[0], &A[i]); PercDown(A, 0, i); } }
相关文章推荐
- 排序算法之 堆排序
- 排序算法-堆排序
- 常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
- 其他排序算法:快速、归并、堆排序
- 6种排序算法及其比较 简单选择排序,堆排序,简单插入排序,希尔排序,冒泡排序,快速排序,归并排序
- C++编程练习(13)----“排序算法 之 堆排序“
- 小学生图解排序算法:⑦堆排序
- 几种常见排序算法的实现(冒泡法,选择法,插入法,快速排序、堆排序)
- 排序算法——堆排序(java语言描述)
- 常见排序算法的实现(三)——堆排序
- 排序算法之堆排序(js)
- 排序算法——堆排序 (转)
- 排序算法之堆排序(Heapsort)解析
- 排序算法-之选择排序(直接选择排序,堆排序)
- 排序算法(插入排序、shell排序、冒泡排序、选择排序、合并排序、堆排序、快速排序、计数排序、基数排序、桶排序)
- 三种排序算法(归并排序、快速排序,堆排序)
- 排序算法-------堆排序(大根堆)
- 一步一步解析java排序算法--堆排序(最小堆)
- 排序算法(3)—优先队列,堆排序
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)