堆排序

来源:互联网 发布:动漫网络黑名单 编辑:程序博客网 时间:2024/06/07 02:41
#include<iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;void swap(int &a,int &b){a = a ^ b;b = a ^ b;a = a ^ b;}void max_heap(int *a,int i,int size){int l = 2 * i;int r = 2 * i + 1;int largest;if(l <= size && a[l] > a[i])largest = l;elselargest = i;if( r <= size && a[r] > a[largest])largest = r;if(largest != i){swap(a[largest],a[i]);max_heap(a,largest,size);}}void build_max_heap(int *a,int size){for(int i = size / 2;i >= 1;i--)max_heap(a,i,size);}void heap_sort(int *a,int size){build_max_heap(a,size);for(int i = size; i >= 2; i--){swap(a[1],a[i]);max_heap(a,1,i - 1);}}int a[100];int main(){int n;while(cin >> n){for(int i = 1;i <= n; i++)cin >> a[i];heap_sort(a,n);for(int i = 1;i <= n; i++)cout << a[i] << " ";cout << endl;}return 0;}