#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<n; i++) {
printf(" %d", arr[i]);
}
printf("\n");
}
void adjustHeap(int *arr, int param1, int j)
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int temp = arr[param1]; // 父节点
int child = 2*param1 + 1; // left child
while(child < j){
if(child + 1 < j && arr[child] < arr[child+1 ]){
child++;
}
if(temp >= arr[child]){
break;
}
arr[param1] = arr[child];
param1 = child;
child = 2*child +1;
}
arr[param1] = temp;
/********** End **********/
}
int* heap_sort(int *arr, int n)
// 基于adjustHeap函数编程实现堆排序
// 函数参数:无序数组arr 数组长度n
// 函数返回值:返回从小到大排序后的数组
{
for(int i=n/2 - 1;i>=0;i--){
adjustHeap(arr,i, n);
}
for(int i = n-1;i>0;i--){
swap(arr[0],arr[i]);
adjustHeap(arr,0, i);
}
return arr;
}
C语言实现堆排序
最新推荐文章于 2024-09-13 22:53:35 发布