堆排序heapsort

#include<stdio.h> void swap(int& a,int& b) { if(a!=b) { a^=b; b^=a; a^=b; } } void MAX_HEAPIFY(int a[],int length,int i)//a数组第一个存值 { int large=i; if(2*i<length && a[i]<a[2*i]){ large = 2*i; } if(2*i+1<length && a[large]<a[2*i+1]){ large = 2*i+1; } if(large!=i){ swap(a[i],a[large]); MAX_HEAPIFY(a,length,large); } } void BUILD_MAX_HEAP(int a[],int length)//将每个非叶子节点从下向上调用MAX_HEAPIFY { for(int i = length/2-1;i>=0;i--) { MAX_HEAPIFY(a,length,i); } } void HEAP_SORT(int a[],int length) { BUILD_MAX_HEAP(a,length); for(int i = length-1; i>0;i--) { swap(a[0],a[length-1]); MAX_HEAPIFY(a,--length,0);//保证最大堆的性质 } } int main() { int a[10] = {16,4,10,14,7,9,3,2,8,1}; HEAP_SORT(a,10); for(int i=0;i<10;i++) { PRintf("%d ",a[i]); } }