写个堆排序的代码

时间2023-05-20 13:42:31 提问来自 广东省广州市 的网友 分类ChatGPT提问 浏览213 热度0
``` def heap_sort(arr): n = len(arr) # 创建大顶堆,从最后一个非叶子节点开始,将其及其子树调整为大顶堆结构 for i in range(n//2-1, -1, -1): # 从最后一个非叶子节点开始,每次循环将当前根节点的左右子树调整为大顶堆 adjust_heap(arr, i, n) # 将最大的元素放到末尾,并更新n的值,重新进行调整使得剩余元素成为大顶堆 for j in range(n-1, 0, -1): # 每次循环将当前无序区的最大值交换到无序区的末尾,并更新n的值,重新进行调整使得剩余元素成为大顶堆 arr[j], arr[0] = arr[0], arr[j] # 当前无序区间中最大数字交换到末尾去 adjust_heap(arr, 0, j) # 重新对当前无序区间进行调整 return arr def adjust_heap(arr, i , length): # 这是一个递归函数:用来实现将当前根节点i及其左右子树都能够成为一个大顶堆 left = 2*i + 1 # 计算出i的左孩子位于arr中的位置是left right = 2*i + 2 # 计算出i的右孩子位于arr中的位 置是right largest = i # 默认情况是以i处作为“有可能”是此时整棵树中“最大” 的物理上 “真正存在” 的物理上 “真正存在” 的物理上 “真正存在” 的物理上 “真正存在” 的物理上 “真正存在” 的物理上 “真正存在” 的物琁 手。也就证明了largest=i这条语句不会错。 if left < length and arr[left] > arr[largest]: # 判断左孩子是否已判定好并满足要求 (即如果left < length (length代表总共多少 元 )证明left执行对应index也必然没 有 超出总index )&& (即如 果 left对应index执行之后array value > largest array value ) 证明largest=left执行之后array value会高。因而largest=left. largest = left // 左侧>根=> 断定采用左侧作 root node. . . . . . . . . . // if right < length and arr[right] > arr[largest]: // 合法性 check && compare. // largest = right // right>root=> 采用right作 root node. // if largest != i: // 本来想采用root node不动而去swap child node => wrong! => swap root & child.// swap(arr , i , largest) // swap the two elements of array based on their indexs.// adjust_heap(arr , largest , length) // recursively do the same thing above until all the element of array are sorted out as a big top heap structure!// ```

AI智能问答网免责声明:
以上内容除特别注明外均来源于网友提问、ChatGPT回答,权益归原著者所有,本站仅作效果演示和欣赏之用;
若以上展示有冒犯或侵害到您,敬请联系我们进行删除处理,谢谢!

上一篇 死神镰刀收割(1张) 下一篇 搜索框的用法