堆排序(依据算法导论伪代码)
2013-06-28 22:23
281 查看
// MAX_HEAP.cpp : 定义控制台应用程序的入口点。 // //堆排序(依据算法导论伪代码)
//数组有效是从1开始的
//程序仅供记录自己的学习历程 #include "stdafx.h" #include "iostream" using namespace std; //此类实现了最大堆的创建 //排序 class HeapSort { public: //创建一个堆 void Build_Heap(int *A,int len); //构建最大堆 void Max_Heap(int *A,int i,int len); //输出 void OutToScreen(int *A,int len); //堆排序 void Heap_Sort(int *A,int len); //交换数据 void SwapData(int *A, int n1,int n2); }; void HeapSort::Build_Heap(int *A,int len) { for(int i = len/2;i >= 1; i--) this->Max_Heap(A,i,len); } void HeapSort::Max_Heap(int *A,int i,int len) { int left; int right; left = i<<1;//注:数组从1开始才有效 right = (i<<1) + 1; int largest; if((left <=len)&&(A[left]>A[i])) largest = left; else largest = i; if((right <=len)&&(A[right]>A[largest])) largest = right; if(i != largest) { SwapData(A,i,largest); Max_Heap(A,largest,len); } } void HeapSort::OutToScreen(int *A,int len) { for(int i = 0; i < len;i++) cout<<A[i]<<" "; cout<<endl; } void HeapSort::Heap_Sort(int *A,int len) { Build_Heap(A,len);//先创建一个堆 for(int i = len; i >=2; i--)//此处需要注意2 { SwapData(A,i,1); Max_Heap(A,1,i-1); } } void HeapSort::SwapData(int *A, int n1,int n2) { int temp = A[n1]; A[n1] = A[n2]; A[n2] = temp; } int AA[]= {0,27,17,3,16,13,10,1,5,7,12,4,8,9,0}; int _tmain(int argc, _TCHAR* argv[]) { HeapSort hs; hs.Heap_Sort(AA,sizeof(AA)/sizeof(int)-1); hs.OutToScreen(&AA[0],sizeof(AA)/sizeof(int)); return 0; }
相关文章推荐
- 算法代码实现之堆排序,C/C++实现
- 快排 和 堆排序算法的细节代码分析
- 算法导论代码 第14章 数据结构的扩张
- 算法导论复习(3) 堆排序
- 算法导论 第六章 堆排序
- 算法导论 6章堆排序的代码实现和部分课后练习
- 【算法导论】堆排序
- 二叉查找树——算法导论第12章简易代码实现~
- 算法-java代码实现堆排序
- 堆排序(最大堆进阶)--【算法导论】
- 【算法导论】C++参考源码之堆排序中的优先级队列
- 【算法导论 第6章 堆排序】
- C语言对堆排序一个算法思路和实现代码
- 算法导论_堆排序
- 【数据结构与算法】【排序】堆排序的代码实现
- 【算法导论实验3】堆结构与堆排序
- 学习算法导论——堆排序
- 算法导论第二十四章-单源最短路径-Cpp代码实现
- 堆排序(算法导论)
- 堆排序(算法导论实现)