C++实现数组最大堆排序
2015-07-14 03:04
661 查看
#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; void siftdown(int *heap,int p,int n) { while (p * 2 + 1 < n) { int temp = p; if (heap[p] < heap[p * 2 + 1]) { temp = p * 2 + 1; } if (p * 2 + 2 < n&&heap[p * 2 + 2] > heap[temp]) { temp = p * 2 + 2; } if (temp != p) { int t = heap[temp]; heap[temp] = heap[p]; heap[p] = t; p = temp; } else break; } } void build(int *heap,int n) { for (int i = (n - 1) / 2; i >= 0; --i) { siftdown(heap, i, n); } } void heapsort(int *heap, int n) { build(heap, n);//建立堆 while (n) { int temp = heap[n - 1]; heap[n - 1] = heap[0]; heap[0] = temp; --n; siftdown(heap, 0, n); } } int main() { srand((unsigned int)time(NULL)); int n; while (cin >> n) { int *heap = new int ; for (int i = 0; i < n; ++i) { heap[i] = rand() % n; cout << heap[i] << ' '; } cout << endl; heapsort(heap, n); for (int i = 0; i < n; ++i)//从小到大 { cout << heap[i] << ' '; } cout << endl; delete[] heap; } return 0; }
相关文章推荐
- C语言之基本算法40—字符串删除元音字母倒序输出
- C语言之基本算法39—字符串经典操作
- C语言之基本算法38—格式化输出10000以内的所有完数
- C语言之基本算法37—数组最大值及其位置
- C语言之基本算法35—数组上三角之积 主对角之积 副对角之积
- 关于C++中的虚拟继承的一些总结
- C++11时间详解
- 经典游戏的C++实现--2048
- C++对C的扩充
- C语言--程序设计基础1—3章
- 关于C语言中结构体定义的一个小问题
- C++ Primer快速入门之四:变量和数据类型
- POJ 3264
- C++编程基础
- C语言基础学习(1~3)重点复习
- C++入门学习——标准库 string 类的使用
- C++中的return, exit 与 abort 的区别
- Java调用C/C++动态库so
- 【c++】size_t 和 size_type的区别
- C语言指针、地址、赋值三者含义