数据结构 — 堆排序
来源:互联网 发布:通达信软件使用教程 编辑:程序博客网 时间:2024/05/16 05:25
1、堆排序的时间复杂度与归并排序相同,O(nlogn)。堆排序的优势在与他只需要固定数量的额外空间,堆排序要比空间复杂性为O(n)的归并排序稍微慢一些,但是比空间复杂性为O(1)的归并排序要快。
2、对序列(26, 5, 77, 1, 61, 11, 59, 15, 48, 19)进行堆排序
过程:
代码:
#include<iostream>using namespace std;#define max_size 11void adjust(int list[], int root, int n);void heapSort(int list[]);/* * 调整最大堆(二叉堆) */void adjust(int list[], int root, int n) { int rootkey, child , temp; rootkey = temp = list[root]; child = 2*root; while(child <= n) { if((child<n) && list[child]<list[child+1]) { child++; } if(rootkey > list[child]) { break; } else { list[child/2] = list[child]; child *= 2; } } //向上调整,所以最后要处理root 中的值 list[child/2] = temp;}void heapSort(int list[]) { int i, j; int n = max_size-1; //创建最大堆 for(i = n/2; i>0; i--) { adjust(list, i, n); } //将root删除(放在数组的最后),调整最大堆 for(j = n-1; j>0; j--) { list[1] = list[1] + list[j+1]- (list[j+1] = list[1]); adjust(list, 1, j); }}int main() { int list[max_size]; list[1] = 26; list[2] = 5; list[3] = 77; list[4] = 1; list[5] = 61; list[6] = 11; list[7] = 59; list[8] = 15; list[9] = 48; list[10] = 19; for(int i = 1; i<max_size; i++) { cout<<list[i]<<" "; } cout<<endl; heapSort(list); for(int i = 1; i<max_size; i++) { cout<<list[i]<<" "; } cout<<endl; return 0; }
0 0
- 数据结构 — 堆排序
- 数据结构——堆排序
- 数据结构——堆排序
- 数据结构——堆排序
- 数据结构——堆排序
- 数据结构 —— 堆排序
- 数据结构 — 浅析堆排序
- 数据结构之排序——堆排序
- 数据结构排序算法——堆排序
- 数据结构-排序-堆排序
- 数据结构 二叉堆 & 堆排序
- 【数据结构】堆、堆排序笔记
- 【数据结构】堆与堆排序
- 数据结构与算法——堆排序
- 数据结构学习11——堆排序
- 数据结构示例——堆排序过程
- 数据结构与算法——堆排序
- Java数据结构——堆排序实现
- Java:CoreJava篇:java.lang.String.getBytes()探索
- LeetCode Letter Combinations of a Phone Number
- iOS新版本特性(引导页)
- makefile中不推荐使用sinclude
- 学习vim有感
- 数据结构 — 堆排序
- 基于at91sam9x5ek嵌入式系统的内核和文件系统双备份实现
- 尾递归与Continuation
- 尾递归对时间与空间复杂度的影响(上)
- Lintcode - Naive Fibonacci
- OSGI系列 Web-Service
- git fetch.git merge,git pull
- 浅谈尾递归的优化方式
- 102. Binary Tree Level Order Traversal