堆排序
来源:互联网 发布:matlab 矩阵拼接 编辑:程序博客网 时间:2024/05/16 01:07
堆排序只需要一个记录的辅助空间,代码中的tmp。
代码中的数组第一个元素a[0],没参与排序,需要排序的元素从1开始,这样代码的逻辑更容易理解(a[i] > a[2i] && a[i] > a[2i + 1] ) || (a[i] < a[2i] && a[i] < a[2i + 1])。i = (1, 2, ... [n/2])
时间复杂度为nlogn, 最坏的情况下也是如此,这是比快排有优势的地方。
#include <iostream>using namespace std;void heapAdjust( int a[], int s, int length){int tmp = a[s];for (int j = 2*s; j<= length; j = 2*j){if ( j < length && a[j] < a[j + 1]){j++;}if (tmp >= a[j]){ break;}a[s] = a[j];s = j;}a[s] = tmp;}void heapSort(int a[], int length){int i = 0;for (i = length/2; i >= 0; i--){heapAdjust(a, i, length);}int tmp = 0;for (i = length; i > 0; i--){tmp = a[i];a[i] = a[1];a[1] = tmp;heapAdjust(a, 1, i - 1);}}void print(const int a[], int &n){for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl;}int main(int argc, char * argv[]){int a[] = {1230, 12, 31, 3, 324, 23, 43, 78, 100};int size = sizeof(a)/sizeof(int);cout << "before sort:" << endl;print(a, size );heapSort(a, size - 1);cout << "after sort:" << endl;print(a, size );}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Cocos2d怎样使用原生态的控件
- mysql: Ubuntu下mysql安装问题与解决方法
- 运行里面的快捷键
- C语言复习 多级指针
- java中map的根据值得到键
- 堆排序
- Javascript 实现marquee功能
- 字符图形-由ABC构成的正立等腰三角形
- php cannot be built with multiple SAPI
- android 设置系统屏幕亮度
- Debug和Release区别
- C++ 模板为什么不能分离编译
- group by后的汇总结果,如何去和总和做百分比
- #define new DEBUG_NEW