堆排序
来源:互联网 发布:火炬之光2 mac 迅雷 编辑:程序博客网 时间:2024/05/23 18:19
#include <stdio.h>#include <string.h>#include <iostream>#include <string>using namespace std;void print(int *a, int n){for (int i = 1; i <= n; i++){printf("%d ", a[i]);}cout << endl;}void heapify(int *a, int x, int n){int l = x << 1;int r = x << 1 | 1;int largest;if (l <= n && a[l] > a[x]){largest = l;}else {largest = x;}if (r <= n && a[r] > a[largest]){largest = r;}if (largest != x){int t = a[largest];a[largest] = a[x];a[x] = t;heapify(a, largest, n);}}void buildHeap(int *a, int n){//在堆中(也就是完全二叉树中),叶子结点的数目应当等于总结点数目(n - n / 2), 所以非叶子结点的数目为n/2(下整) for (int i = n / 2; i >= 1; i--){heapify(a, i, n);}}void heapSort(int *a, int n){buildHeap(a, n);print(a, n);for (int i = n; i > 1; i--){int t = a[i];a[i] = a[1];a[1] = t;heapify(a, 1, i - 1);}}int main(){int n;int a[100];scanf("%d", &n);for (int i = 1; i <= n; i++) //由于创建堆的时候,根结点的编号是从1开始的,所以如果依旧按照从0开始编写序号的话,就不方便 {scanf("%d", &a[i]);}heapSort(a, n);print(a, n);return 0;}
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- MAC下 cocos2d-x环境搭建
- 修改Jdeveloper的maven版本
- 《算法导论》笔记 第9章 9.1最小值和最大值
- DM9000 LINUX标准驱动S3C2440平台
- 从熵的角度去看公司变迁
- 堆排序
- 推荐几款很棒的 JavaScript 表单美化和验证插件
- Java JDK 的安装
- 代码混淆与反射的冲突
- 腾讯新浪通过IP地址获取当前地理位置(省份)的接口
- JIRA中文在线培训课程开课啦!(第四讲,7月12日,报名已开启)
- 财付通手机支付接口申请
- mfc 使用cfiledialog改变保存路径并保存文件
- 设计模式--责任链模式ChainOfResponsibility(行为型)