堆排序的c++实现
来源:互联网 发布:电脑误删数据恢复 编辑:程序博客网 时间:2024/05/09 22:14
#include<iostream>using namespace std;int a[]={0,5,1,2,4,6,9,7};int maxheap(int a[],int i,int heapsize)//验证堆的正确性 { int left=2*i; int right=2*i+1; int largest; if(heapsize>=left&&a[left]>a[i]) { largest=left; } else largest=i; if(heapsize>=right&&a[right]>a[largest]) { largest=right; } if(largest!=i) { int flag; flag=a[largest]; a[largest]=a[i]; a[i]=flag; maxheap(a,largest,heapsize); }}int build_max_heap(int a[],int heapsize)//建堆 { for(int i = heapsize/2 ; i >=1 ; i-- ) { maxheap(a,i,heapsize); } }int heapsort(int a[],int heapsize)//堆排序 { build_max_heap(a,heapsize); for(int i = heapsize; i >=1 ;i--) { swap(a[1],a[i]); maxheap(a,1,i-1); }}int main(){ // build_max_heap(a,8); int size; cin>>size; for(int i=0;i<size;i++) { cin>>a[i+1]; } heapsort(a,size); for(int i=1;i<size+1;i++) { cout<<a[i]<<" "; } system("pause");}