排序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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端