堆-c++

来源:互联网 发布:互联网行业数据 编辑:程序博客网 时间:2024/05/18 00:47
/***********************************************************************版权所有 (C)2014, cy。**文件名称:堆.cpp *内容摘要:无*其它说明:无*当前版本: V1.0*作    者:cheng yang*完成日期: 20140624**  版本       修改时间     修改人           修改内容*********************************************************************   V1.0        20140624    cy   创建**********************************************************************/#include <iostream>using namespace std;//字段最大长度const int MAXSIZE = 10000;int a[MAXSIZE] = {0};int heapsize = 0;//函数声明inline void swap(int i , int j){int temp = a[i];a[i] = a[j];a[j] = temp;}//获得i节点的父亲节点下标inline int Parent(int i) {return i >> 1;}//左孩子节点的下标inline int Left(int i){return i << 1;}//右孩子节点的下标inline int Right(int i){return (i << 1) + 1;}/***********************************************************************功能描述:保持堆的性质*输入参数:数组a[]的下标*输出参数:无*返回值:无 *其它说明:无*修改日期        版本号            修改人         修改内容* --------------------------------------------------------------* ***********************************************************************/void MaxHeapify(int i){int left = Left(i);int right= Right(i);int largest = 0;if (left <= heapsize && a[left] > a[i]){largest = left;}else{largest = i;}if (right <= heapsize && a[right] > a[largest]){largest = right;}if (largest != i){swap(i, largest);MaxHeapify(largest);}}/***********************************************************************功能描述:建堆*输入参数:指向全局数组的指正 arr*堆的大小 n*输出参数:无*返回值:无*其它说明:无*修改日期        版本号            修改人         修改内容* --------------------------------------------------------------************************************************************************/void BuildHeapify(int *arr, const int n){heapsize = n;for (int i = heapsize / 2; i >= 0; i--){MaxHeapify(i);}}/*****************************************************************功能描述:  主函数                                             **输入参数:  无                                                 **输出参数:  无                                                 **返回值  :无                                                 **其他说明:  无                                                 **修改日期        版本号       修改人        修改内容* -------------------------------------------------------------------------------* ****************************************************************/int main(){int i = 0;while (cin >> a[i++])//为什么i会比实际输入的多出2个,输入3个数(a[0]--a[2]),可i=4;??BuildHeapify(a, i-2);for (int j =i-2 ; j >= 0; j--){cout << a[0] << endl;swap(0, j);heapsize--;MaxHeapify(0);}system("pause");}

0 0