这是一个有效的HeapSort吗?

时间:2015-06-01 01:10:31

标签: python algorithm sorting heap

在过去的6个小时里,我一直在阅读关于构建一个堆的教程和学术资料。我终于在python中对原型进行了原型化,对整数列表进行了排序。但是,我不完全确定我的解决方案是否构成有效的堆。这是一个非常简单的解决方案,绝对可以改进,但我想知道它是否有效。令人困惑的是,每个人似乎都有自己的'首选'方式来实现这个算法。

非常感谢提前。

def heapsort(array):
    array = heapify(array)
    array = insert(array, 9999)
    print(array)

def heapify(array):
    end = len(array)
    i = 0
    j = 0
    while i < end:
        while j < end:
            if array[i] > array[j]:
                array = swap(array, i, j)
            j += 1
        i += 1
        j = i
    return array

def insert(array, x):
    array.append(x)
    return heapify(array)


def swap(array, a, b):
    temp = array[a]
    array[a] = array[b]
    array[b] = temp
    return array

def main(array):
    heapsort(array)

if __name__ == '__main__':
    array = [3, 1, 2, 4, 6, 7, 9, 0]
    main(array)

2 个答案:

答案 0 :(得分:2)

您的heapify()应该比较堆内的父/子元素(树结构)。它们在阵列中的相对位置是

ChildIndex = 2 * Parent Index + [0|1]  # two children per parent

就数组的索引而言。这在您的实施中并不明显。

答案 1 :(得分:2)

您所写的内容似乎是Selection Sort

堆排序将数组排列成堆(最简单的是二进制堆),即堆 其中找到最小元素的时间是O(1)并且去除最小元素的结构是O(log n)并且元素的插入也是O(log n)。然后,它重复获取最小元素以生成排序顺序。