十大经典排序之堆排序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
十大经典排序之堆排序#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 **********/ }