堆排序算法

#include<stdio.h>#define LEFT(i) i<<1#define RIGHT(i) (i<<1)+(1)#define PARENT(i) i>>1void swap(int *p,int *q){ int tmp=*p; *p=*q; *q=tmp;}void maxHeapIFY(int *arr,int i,int heap_size){ int l=LEFT(i); int r=RIGHT(i); int largest; if(l<=heap_size&&arr[l]>arr[i]) largest=l; else largest=i; if(r<=heap_size&&arr[r]>arr[largest]) largest=r; if(largest!=i) { swap(&arr[i],&arr[largest]); maxHeapIFY(arr,largest,heap_size); }}int main(){ int arr[]={0,12,23,1,24,122,8,22}; int len=sizeof(arr)/sizeof(arr[0]); int length=len-1; int heap_size=length; int i=length>>1; for(;i>=1;i–) { maxHeapIFY(arr,i,heap_size); } int j=length; for(;j>=2;j–) { swap(&arr[1],&arr[j]); heap_size=heap_size-1; maxHeapIFY(arr,1,heap_size); } int k=1; for(;k<=length;k++) { printf(“%d “,arr[k]); } system(“pause”); return 0;}

,天不负;卧薪尝胆,三千越甲可吞吴。

堆排序算法

相关文章:

你感兴趣的文章:

标签云: