堆排序

来源:互联网 发布:最离奇的杀人案件知乎 编辑:程序博客网 时间:2024/06/09 14:19
#include <iostream>#include <algorithm>using namespace std;//最大堆void HeapAdjust(int *a, int i, int size)//调整堆{int lchild=2*i;//i的左孩子节点int rchild=2*i+1;//i的右孩子节点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)//建立堆{for(int 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 a[100];int size;while(scanf("%d",&size)==1 && size>0){int i;for(i=1; i<=size; i++)cin>>a[i];HeapSort(a, size);for(i=1; i<=size; i++)cout<<a[i]<<" ";cout<<endl;}return 0;}


 

原创粉丝点击