堆排序
来源:互联网 发布:java异常日志记录 编辑:程序博客网 时间:2024/06/05 19:07
#include<iostream>using namespace std;//升序建立最大堆;降序建立最小堆void heapadjust(int arr[], int start, int end) { int tmp = arr[start]; //根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2 for (int i = 2 * start + 1; i <= end; i = 2 * i) { if (i < end&&arr[i] < arr[i + 1]) i++; if (arr[start] > arr[i]) break; else { arr[start] = arr[i]; start = i; } } arr[start] = tmp;}/*void heapadjust(int arr[], int pos, int len) { int tmp,child; //根结点从0开始,所以i结点的左右孩子结点的下标为2i+1和2i+2 for (temp=arr[pos];2*pos+1<=len;pos=child) { child=2*pos+1; if (child < end&&arr[child] < arr[child + 1]){ child++; } if (arr[pos] < arr[child]) arr[pos] = arr[child]; else break; } arr[pos] = tmp;}*/void heapsort(int arr[], int len) { for (int i = len / 2-1; i >= 0; i--) { heapadjust(arr, i, len-1); } for (int i = len - 1; i >= 0; i--) { int tmp = arr[i]; arr[i] = arr[0]; arr[0] = tmp; heapadjust(arr, 0, i - 1); }}int main() { int arr[] = { 5,4,9,8,7,6,0,1,3,2 }; int len = sizeof(arr) / sizeof(arr[0]); heapsort(arr, len); for (int i = 0; i < len; i++) { cout << arr[i] << ' '; } cout << endl; system("pause"); return 0;}
阅读全文
0 1
- 堆及堆排序
- 堆/堆排序特点
- 【二叉堆、堆排序】
- 二叉堆 & 堆排序
- 二叉堆 & 堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆与堆排序
- 堆和堆排序
- 堆排序(最大堆)
- 堆和堆排序
- 堆和堆排序
- 堆及堆排序
- 堆和堆排序
- 堆与堆排序
- 基于Linux系统的tcp协议的即时通信系统(聊天室)
- linux调度之SMP负载均衡
- C#删除数组重复元素并输出
- Java反射技术机制及一键封装原理
- redis入门——基础命令
- 堆排序
- 那些年——不能说的秘密
- python 39 numpy常见函数小结
- 通用类型的两路归并算法实现(三)——运用Comparator实现更加通用的两路归并算法
- (软件工程)习题2.4
- Java设计模式——适配器模式(Adapter Pattern)
- NVIDIA Jetson TX1 系列开发教程之十二:libcurl、RapidJSON安装
- SpringMvc+POI 处理Excel的导入操作需要的所有环境
- mitmproxy爬APP数据