c++学习之--排序5-堆排序
2013-11-21 19:32
239 查看
<pre code_snippet_id="76498" snippet_file_name="blog_20131121_1_2374128" name="code" class="cpp"><pre code_snippet_id="76498" snippet_file_name="blog_20131121_1_2374128" name="code" class="cpp">
#include <iostream>
using namespace std; // 58 45 72 86 77 21 34 60 void Swap(int *x,int *y) { int t; t=*x; *x=*y; *y=t; } void HeapAdjust(int *a,int i,int size) { int lchild=2*i; int rchild=2*i+1; int max=i; if(i<=size/2) { if(lchild<=size && a[lchild]>a[max]) { max=lchild; } if(rchild<=size && a[rchild]>a[max]) { max=rchild; } if(max!=i) { Swap(&a[i],&a[max]); HeapAdjust(a,max,size); } } } void BuildHeap(int *a,int size) { int i; for(i=size/2;i>=1;i--) { HeapAdjust(a,i,size); } } void HeapSort(int *a,int size) { BuildHeap(a,size); for(int i=size;i>=1;i--) { Swap(&a[1],&a[i]); HeapAdjust(a,1,i-1); } } int main() { int n,i; cin>>n; int *a=new int[n+1]; for(i=1;i<=n;i++) { cin>>a[i]; } HeapSort(a,n); for(i=1;i<=n;i++) { cout<<a[i]<<" "; } cout<<endl; return 0; } //堆排序 (大顶堆) //不稳定,建堆需要时间较长 时间复杂度为 O(n*log2(n))
相关文章推荐
- 数据结构学习笔记 --- 排序(选择排序、堆排序)
- c++: 直接插入排序,冒泡排序,快速排序,堆排序和归并排序
- C++学习笔记10 各种各样的排序算法复杂度
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- c++学习笔记:直接排序
- C++排序之堆排序(6)
- C/C++排序之五(堆排序)
- 算法学习之排序学习之堆排序和如何建堆
- C++中qsort排序方法 / 同时可以学习回调函数
- 数据结构学习笔记排序 (冒泡、插入、希尔、堆排序、归并排序)
- 学习笔记:快速排序的C++、JavaScript(2种方法)、Java实现
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析之后续补充说明(有图有真相)
- [C++]数据结构:排序算法Part1----冒泡排序、选择排序、插入排序、堆排序
- C++ 排序函数 sort(),qsort()的用法 / 同时可以学习回调函数
- Linux C/C++编程一站式学习中选择排序
- C/C++ 数组排序(平均时间复杂度 O(nlogn))归并、快速、堆、希尔之堆排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 几种排序算法的C++实现——快速排序、堆排序、基数排序
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)