排序7-堆排序

排序7-堆排序



序列->完全二叉树


建立堆序(正序)

/*
@param arr[] 待调整数组
@param index 待调的结点下标
@param len 数组长度
*/
void heapAdjust(int arr[], int index, int len){
//保存待调整结点的下标
int max = index;
//保存父结点的左右结点下标
int lChild = index*2+1;
int rChild = index*2+2;
//判断下标不越界, 且左子结点大于父节点, 更新最大值的下标
if(lChild<len && arr[lChild]>arr[max]){
max = lChild;
}
//判断下标不越界, 且右子结点大于父节点, 更新最大值的下标
if(rChild<len && arr[rChild]>arr[max]){
max = rChild;
}
//如果max不指向父节点,交换max和父节点位置,继续递归调用,调整交换后堆的堆序
if(max!=index){
mySwap(arr,max,index);
heapAdjust(arr,max,len);
}
}

堆排序

/*
@param arr[] 待调整数组
@param len 数组长度
*/
void heapSort(int arr[],int len){
//初始化堆 len/2-1得到最后一个非叶子结点的下标 (上滤)
for (int i = len/2-1; i>=0; i--){
heapAdjust(arr,i,len);
}
//调整堆序
for (int i = len-1; i>=0; i--){
//交换堆顶元素和最后一个元素
mySwap(arr,0,i);
//调整堆序(从头结点开始调整)
heapAdjust(arr,0,i);
}
}
posted @   HIK4RU44  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示