算法设计之堆的实现与堆排序实现(C++实现)
2014-08-06 12:00
537 查看
// 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); }
}
相关文章推荐
- 算法设计之,堆,堆排序,基于最大堆的最大优先队列的实现(C++实现)
- 算法数据结构C++实现8 堆排序 难点分析
- 算法设计与分析--霍夫曼树编码(C++实现)
- 算法思路重新实现-堆排序 中的 C++ & Java
- 古典密码算法的设计与实现(C++实现)
- C++设计实现算法时易犯错误
- c++堆排序实现(heapsort) (算法导论)
- 算法设计之快速排序的实现 (C++实现)
- 算法设计之归并排序(C++实现)
- 算法代码实现之堆排序,C/C++实现
- 【算法】排序 (一):插入排序&希尔排序&选择排序&堆排序(C++实现)
- 【算法导论】c++实现堆排序
- 算法之堆排序(最大堆c++实现)
- 算法设计之计数排序 (C++实现)
- 算法设计之快速排序的随机化版本 (C++实现)
- 算法设计--蛮力法&&分治法求最近对问题(C++实现)
- 算法设计、分析与实现 从入门到精通 C、C++和Java 这本书的堆实现85页C++语言实现有问题
- 算法学习 - 堆排序 ( HeapSort ) C++实现
- 基于C++的农夫过河问题算法设计与实现方法
- AIX 程序设计大赛-AIX正方形问题算法及Java程序实现