算法设计之堆的实现与堆排序实现(C++实现)
来源:互联网 发布:域名排名选择 编辑:程序博客网 时间:2024/06/05 05:58
// heap.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "iostream"using namespace std;//用于维护最大堆的性质,假定 以 leftChild(i)和rightChild(i)为根节点的二叉树都是最大堆,//但是 arr[i] 可能小于其孩子,这就违背了最大堆的性质。void maxHeapity(int*,int);void buildMaxHeap(int*,int);//构建一个最大堆void heapSort(int*,int);//利用最大堆进行堆排序int parent(int);//根据给定节点的下标 i ,计算它的父节点的下标。int leftChild(int);//根据给定节点的下标 i ,计算它的左孩子节点的下标。int rightChild(int);//根据给定节点的下标 i ,计算它的右孩子节点的下标。////////////////////////////////////////////////////////////////////////////////////////////主函数int _tmain(int argc, _TCHAR* argv[]){int arr[]={4,1,3,2,16,9,10,14,8,7};int arrSize =10;//存放数组中元素的个数cout<<"原来数组的情况:";for(int i=0;i<arrSize;i++)cout<<arr[i]<<", ";cout<<endl;//构建堆buildMaxHeap(arr,arrSize);//输出构建后的堆cout<<"构建成堆后的数组值:";for(int i=0;i<arrSize;i++)cout<<arr[i]<<", ";cout<<endl;//堆排序heapSort(arr,arrSize);cout<<"堆排序后的结果";//输出堆排序后的结果for(int i=0;i<arrSize;i++)cout<<arr[i]<<", ";cout<<endl;return 0;}void maxHeapity(int* arr,int i,int arrSize){int l = leftChild(i);int r = rightChild(i);int maxIndex=0;if(l<=arrSize-1 && arr[l]>=arr[i])maxIndex =l;else maxIndex = i;if(r<=arrSize-1&&arr[r]>=arr[maxIndex])maxIndex = r;if(maxIndex !=i){int temp;temp = arr[maxIndex];arr[maxIndex] = arr[i];arr[i] = temp;maxHeapity(arr,maxIndex,arrSize);}}void buildMaxHeap(int* p,int arrSize){for(int i=arrSize-1/2;i>=0;i--)maxHeapity(p,i,arrSize);}int parent(int i){return i/2;}int leftChild(int i){return 2*i+1;}int rightChild(int i){return 2*(i+1);}void heapSort(int* arr,int arrSize){buildMaxHeap(arr,arrSize);for(int i=arrSize-1;i>=0;i--){int temp;temp=arr[0];arr[0]=arr[i];arr[i]=temp;arrSize -=1;maxHeapity(arr,0,arrSize);}
}
0 0
- 算法设计之堆的实现与堆排序实现(C++实现)
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)
- 常见排序算法的C语言实现之堆排序
- 排序算法(C实现)--------- 堆排序
- 【排序算法】之堆排序的实现
- 堆排序算法实现(C++)
- 堆排序算法(C & Java 实现)
- 堆排序算法(c 语言实现)
- 堆排序的算法实现(C/C++)
- 算法代码实现之堆排序,C/C++实现
- 算法之堆排序(最大堆c++实现)
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序算法的实现
- 堆排序的算法实现
- 堆排序算法的实现!!
- 堆排序的C实现
- 堆排序的实现(c++)
- Android 高效加载大图片
- 书单:根据《用户体验要素》整理的PM书单
- HtmlParser初探--使用Nodefilter和Visitor进行网页分析
- TProfiler部署文档
- 今天开通了
- 算法设计之堆的实现与堆排序实现(C++实现)
- errno、stderr、perror函数和strerror函数
- oracle自增列
- 二十五、oracle pl/sql进阶--控制结构(分支,循环,控制)
- 非阻塞socket编程
- NO.5以后再也不自己写数据了
- [NOIP2013]花匠
- HQL查询语言
- 将md5压缩成8位32进制生成8位长度的唯一英文数字组合字符串