zoukankan      html  css  js  c++  java
  • 使用PYTHON完成排序(堆排序)

    class HeapStructure:
        def __init__(self, ls):
            self.ls = ls
    
        def shift_up(self, index):  # 上移使符合堆要求
            if index == 0:
                return
            ls = self.ls
            par_index = (index - 1) // 2
            if ls[par_index] < ls[index]:
                ls[par_index], ls[index] = ls[index], ls[par_index]
            self.shift_up(index-1)
    
        def shift_down(self, index, last_index):  # 下移使符合堆要求
            ls = self.ls
            child_left, child_right = 2 * index + 1, 2 * index + 2
            if child_left > last_index:
                return
            if child_left < last_index and ls[child_left] < ls[child_right]:
                if ls[index] < ls[child_right]:  # 与右子节点交换
                    ls[index], ls[child_right] = ls[child_right], ls[index]
                    self.shift_down(child_right, last_index)
            else:
                if ls[index] < ls[child_left]:  # 与左子节点交换
                    ls[index], ls[child_left] = ls[child_left], ls[index]
                    self.shift_down(child_left, last_index)
    
        def sort(self):
            i = len(self.ls)
            if i == 0:
                return self.ls
            last_index = i - 1
            self.shift_up(last_index) # 变为最大堆
            self.ls[0], self.ls[last_index] = self.ls[last_index], self.ls[0] # 最大值移动到队尾
            last_index -= 1
            while last_index:
                self.shift_down(0, last_index=last_index) # 调整为最大堆
                self.ls[0], self.ls[last_index] = self.ls[last_index], self.ls[0]
                last_index -= 1
            return self.ls
    
    
    if __name__ == '__main__':
        ls = [5, 1, 2, 4, 8, 0, 9]
        print(HeapStructure(ls).sort())
        ls = []
        print(HeapStructure(ls).sort())
    
  • 相关阅读:
    模拟链表
    解密回文——栈
    解密QQ——队列
    排序算法的实现与比较
    2016年第七届蓝桥杯C/C++B组省赛题目解析
    记账类问题汇总
    斐波那契数列题型汇总
    MFC绘图小实验(1)
    MFC绘图基础——上机操作步骤
    求 pi 的近似值题型汇总
  • 原文地址:https://www.cnblogs.com/lyg-blog/p/10700762.html
Copyright © 2011-2022 走看看