堆排序
来源:互联网 发布:skype6.6mac官方下载 编辑:程序博客网 时间:2024/06/06 13:21
首先建立最大堆,然后让当前最后一个元素替换第一个元素,此时可能破环最大堆的结构,并进行堆的不断调整过程。堆排序的时间复杂度为:O(nlogn)。
#include "stdafx.h"#include <iostream>#include<algorithm>using namespace std;void heapAdjust(int a[], int i, int len) {int lchild = 2 * i;int rchild = 2 * i + 1;int max = i;if (i<=len/2){if (lchild + 1 <= len&&a[lchild] > a[max]) {max = lchild;}if (rchild+1<=len&&a[rchild]>a[max]){max = rchild;}if (max!=i){swap(a[i],a[max]); heapAdjust(a,max,len);}}}void heapBuild(int a[], int len) {for (int i = len/2; i >=0; i--){heapAdjust(a,i,len);}}void heapSort(int a[], int len) {heapBuild(a,len); //建立大顶堆for (int i = len-1; i >=0; i--){ swap(a[0],a[i]); //将第一个值与最后一个值交换,将最大值移动到当前最末尾heapAdjust(a,0,i-1); //调整堆结构}}void output(int a[], int len) {for (int i = 0; i < len; i++) {cout << a[i] << " ";}cout << endl;}int main(){int a[6] = {96,83,27,38,11,9};int len = sizeof(a)/sizeof(a[0]);heapSort(a,len);output(a, len);return 0;}
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 连接池技术
- 01背包及完全背包问题(51Nod
- 首席架构师眼里的架构本质
- postman下载
- 使用PHP在Dreamweaver下实现用户信息查询
- 堆排序
- 最近用vc重写了xampp控制面板
- iOS 开发+(void)load与+(void)initialize区别
- 利用Jetty部署Java web项目
- contenteditable
- synchronized 对象锁和 ReentrantLock非公平锁tryLock() 的比较
- [Havok学习笔记(7)] 样例US_Soldier_Project.hkp学习
- 通过修改指示器的间距来改变TabLayout指示器的宽度
- C#学习笔记1