堆排序C++
2015-09-10 18:24
435 查看
堆排序时间复杂度为O(nlgn),具有空间原址性,只需要常数个额外的元素空间存储临时数据。
#include <iostream> using namespace std; void MaxHeapify(int *array,int length,int i){ int left=i*2; int right=i*2+1; int largest=i; if(left<=length && array[left]>array[i]) largest=left; else largest=i; if(right<=length && array[right]>array[largest]) largest=right; if(largest!=i){ int temp=array[largest]; array[largest]=array[i]; array[i]=temp; MaxHeapify(array,length,largest); } } void BuildMaxHeap(int *array,int length){ for(int i=length/2;i>=1;--i) MaxHeapify(array,length,i); } void HeapSort(int *array,int length){ BuildMaxHeap(array,length); for(int i=length;i>1;--i){ int temp=array[1]; array[1]=array[i]; array[i]=temp; MaxHeapify(array,i-1,1); } } int main(){ int n; cout<<"input number:";cin>>n; int *array=new int[n+1]; cout<<"input array:"; for(int i=1;i<=n;++i) cin>>array[i]; HeapSort(array,n); for(int i=1;i<=n;++i) cout<<array[i]<<" "; cout<<endl; delete[] array; return 0; }
相关文章推荐
- C/C++_宏定义多次重复定义
- 如何学好C++,用好类库很重要
- [C++11 并发编程] 17 超时等待 - time_point
- 2015.09.09 C++笔记
- C++例子:setprecision
- C++异常机制
- C++析构函数为什么要为虚函数
- C++Primer第五版 1.4.2节练习
- C++初始化函数列表
- Effective C++ 条款31 将文件中间的编译依存关系降至最低
- 关于C++用法的学习心得
- C++的学习心得
- C++学习心得
- 值得推荐的C/C++框架和库
- C++Primer第五版 1.4.1节练习
- 深入理解C++编程中的局部变量和全局变量
- C++学习心得
- C++Primer第五版 1.3节练习
- C++中new和malloc的区别
- C++Primer第五版 1.2节练习(解答)