c++实现简单的建堆、维护堆和堆排序
2015-05-06 12:32
369 查看
// algorithms.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include "iostream" using std::cout; using std::endl; int heapSize; void maxHeapIFY(int *,int); void buildHeap(int *,int length); void swap(int &, int &); void heapSotr(int *); int main() { int a[10] = { 121, 22, 13, 34, 53, 62, 71, 48, 59, 104}; heapSotr(a); for (size_t i = 0; i < 10;i++) { cout << a[i] << " "; } return 0; } void buildHeap(int *a,int length){ heapSize = length - 1; for (int i = length>>1; i >= 0; i--) { maxHeapIFY(a, i); } } void maxHeapIFY(int *a,int i){ int l = (i << 1) + 1; int r = (i << 1) + 2; int largest; if (l <= heapSize && a[i] < a[l]) { largest = l; } else { largest = i; } if (r <= heapSize && a[largest] < a[r]) { largest = r; } while (largest!=i) { swap(a[largest], a[i]); i = largest; int l = (i << 1) + 1; int r = (i << 1) + 2; if (l <= heapSize && a[i] < a[l]) { largest = l; } else { largest = i; } if (r <= heapSize && a[largest] < a[r]) { largest = r; } } } void swap(int &i, int &j){ int temp = i; i = j; j = temp; } void heapSotr(int *a) { buildHeap(a, 10); for (int i = 9; i >= 1;i--) { swap(a[i], a[0]); heapSize = heapSize - 1; maxHeapIFY(a, 0); } }
相关文章推荐
- C++ 实现以简单的mysql连接池
- 设计模式 -- 简单工厂模式 -- c++实现
- stack的简单用法举例(C++实现)
- 二叉树的C++简单实现
- c++实现二叉堆及堆排序
- 简单工厂模式 c++实现
- 单链表的简单c++实现
- C++单例模式的简单实现
- 游戏中按概率播放某个音效简单c++实现
- 用C++简单实现的——BlockingQueue类(java)
- 算法思路重新实现-堆排序 中的 C++ & Java
- c++ 实现一个简单的k-v数据黑板
- 实例学MFC(3)--超简单C++实现网络下载器
- LRU的C++的简单实现
- linux 下c++线程池的简单实现(在老外代码上添加注释)
- 简单泊车管理系统-c++实现
- 简单单向链表(C++模版技术实现)
- C++智能指针及其简单实现
- 简单链式栈(C++模版技术实现)
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)