堆排序
来源:互联网 发布:mac修容粉色号怎么选 编辑:程序博客网 时间:2024/06/10 00:28
1、堆实际上就是一个完全二叉树。
2、堆分为大根堆和小根堆。大根堆:父节点的数据大于子节点。 小根堆:父节点的数据小于子节点。
3、小根堆代码如下:
#include <stdio.h>void HeapAdjust (int *arr,int i,int len) // 把无序堆转换成小根堆{int tmp;for(int j=2*i;j<=len;j*=2){if(j<len && arr[j]>arr[j+1]){tmp=arr[j];arr[j]=arr[j+1];arr[j+1]=tmp;}if(arr[j]>arr[i]){break;}else{tmp=arr[j];arr[j]=arr[i];arr[i]=tmp;}}}void HeapSort (int *arr,int len) {int tmp;for (int i = len / 2; i > 0; --i){HeapAdjust(arr,i,len); }for (int j = len; j > 0; --j) // 把根节点与最后一个节点的数交换,多次执行,就会得到小根堆(有序数列){tmp = arr[1];arr[1] = arr[j];arr[j] = tmp;HeapAdjust(arr, 1, j-1);}}int main(){int arr[]={-1,5,3,6,4,7,2};int len=sizeof(arr)/sizeof(arr[0])-1;HeapSort (arr,len);for(int i=1;i<len+1;i++){printf("%d ",arr[i]);}printf("\n");return 0;}
其程序结果运行如下图:
阅读全文
0 0
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- Android框架浅析之锁屏(Keyguard)机制原理
- Google算法题:M-Find the Duplicate Number
- fragment
- JAVA 四大域对象总结
- 面试题大全1
- 堆排序
- this--java基础---this到底指的是谁??
- 如何安装与连接MySQL?
- 搜索。深搜学习。深度优先搜索之数字全排列。nyoj,组合数
- HDU 3335 Divisibility(Dilworth定理+最小路径覆盖)
- Surrounded Regions leetcode java
- Ubuntu下vim的配置
- MongoDB可以利用正则表达式进行模糊查询
- keras中文文档笔记12——协助使用Keras