首页 > 代码库 > 堆排序的一种实现
堆排序的一种实现
1 void HeapAdjust(int a[],int s,int m)
2 { 3 int temp = a[s]; 4 5 for(int j=2*s;j<=m;j=j*2) 6 { 7 if(j<m && a[j]<a[j+1]) 8 ++j; 9 if(temp>=a[j]) //如果只写大于而不写等于会出现问题,10 break;11 else12 {13 a[s]=a[j];14 s=j;15 }16 }17 18 a[s] = temp;19 } 20 21 void HeapSort(int a[],int n)22 {23 for(int i=n/2-1;i>=0;--i)24 HeapAdjust(a,i,n-1);25 for(int i=n-1;i>0;--i)26 {27 swap(a[0],a[i]); //将大顶堆的根与最后一个元素相交换 28 29 HeapAdjust(a,0,i-1); 30 } 31 }
HeapAdjust(int a[],int s,int m)实现的功能是一次调整,假设数组中除了a[s]外都满足大顶堆的定义。
HeapSort(int a[],int n)中有两步,第一步是根据原来的数组建立一个符合定义的大顶堆。 然后把大顶堆的第一个元素与最后一个元素想交换,那么势必使得原来的
大顶堆不在符合定义(即从a[0]到a[i-1])已不是大顶堆,要调整。
堆排序的一种实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。