十大经典排序之堆排序
十大经典排序之堆排序#include "sort_.h"
void print_array(int *arr, int n)
// 打印数组
{
if(n==0){
printf("ERROR: Array length is ZERO\n");
return;
}
printf("%d", arr[0]);
for (int i=1; i printf(" %d", arr[i]); } printf("\n"); } void adjustHeap(int *arr, int param1, int j) // 编程实现堆的调整 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ int temp=arr[j]; int child=2*j+1; while(child if((child if(temp { arr[j]=arr[child]; j=child; child=2*j+1; } else break; } arr[j]=temp; /********** End **********/ } int* heap_sort(int *arr, int n) // 基于adjustHeap函数编程实现堆排序 // 函数参数:无序数组arr 数组长度n // 函数返回值:返回从小到大排序后的数组 { // 请在这里补充代码,完成本关任务 /********** Begin *********/ int i; int temp; for(i=n/2-1;i>=0;i--) adjustHeap(arr,n,i); for(i=n-1;i>0;i--) { temp=arr[0]; arr[0]=arr[i]; arr[i]=temp; adjustHeap(arr,i,0); } return arr; /********** End **********/ }