堆排序
来源:互联网 发布:开心消消乐未联接网络 编辑:程序博客网 时间:2024/05/21 07:01
算法分类:
数据结构
算法原理:
对于非降序排列而言:(升序同理)
利用最大最小堆的性质,每次对数组生成最大堆后即将根节点放置到数组末尾,并对剩余数组继续生成最大堆。
算法时间复杂度:
时间复杂度:O(nlogn)
空间复杂度:O(1)
代码实现:hdu1040
#include <iostream>using namespace std;int data[1005];void siftDown(int index, int n) {int k = index;while (k*2 <= n) {k *= 2;if (k < n && data[k+1] > data[k]) {++ k;}if (data[k/2] < data[k]) {swap(data[k/2],data[k]);} else {break;}}};void makeHeap(int n) {for (int i = n/2; i > 0; -- i)siftDown(i, n);};void heapSort(int n) {makeHeap( n);for (int i = n; i > 0; -- i) {swap(data[1], data[i]);siftDown(1, i-1);}};int main(){int T, n;scanf("%d",&T);while (T --) {scanf("%d",&n);for (int i = 1; i <= n; ++ i) {scanf("%d",&data[i]);}heapSort( n);for (int i = 1; i < n; ++ i) {printf("%d ",data[i]);}printf("%d\n",data[n]);}}
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- java中表示二进制、八进制、十进制、十六进制
- RC充放电时间公式
- 番茄工作法软件 Pomodairo1.9
- 写给我亲爱的女儿
- 噪声容限
- 堆排序
- extends Thread 与 implements Runnable 的区别
- epoll模型
- 我国首办素质体育机器人比赛 让机器人变运动员
- 一个例子说明C语言中代码块作用域、函数作用域、函数原型作用域、文件作用域的区别
- 速度好慢啊
- 由2个值组合成key的STL map排序问题
- Struts2之文件上传(单文件/多文件)
- 蚂蚁变大象:浅谈常规网站是如何从小变大的(二)