堆排序

Posted liangyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了堆排序相关的知识,希望对你有一定的参考价值。

void swap(int* a,int i,int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}


void head(int* a,int current,int n){
if(current>=n) return;

int left = 2*current;
int right = left+1;

int max_index;
if(left>=n) return;
if(right>=n) max_index=left;
else max_index = (a[left]>a[right])?left:right;

if(a[current]<a[max_index]) {
swap(a[current],a[max_index]);
heap(a,max_index,n);
}

}


void sortheap(int *a,int n){
for(int i=N/2;i>=0;i--)
heap(a,i,n);
for(int i=n-1;i>=0;i--){
heap(a,0,i);
swap(a,0,i);
}

}

 

以上是关于堆排序的主要内容,如果未能解决你的问题,请参考以下文章

排序算法:堆排序-Java实现

排序算法总结之堆排序

[ 数据结构 -- 手撕排序算法第七篇 ] 堆及其堆排序

重温基础算法内部排序之堆排序法

重温基础算法内部排序之堆排序法

堆(利用堆进行数组排序)-堆排序