排序算法之堆排序

import random

def sift(alist, k, m):
    i = k
    j = 2 * i
    while j <= m:
        if j < m and alist[j] < alist[j + 1]:
            j += 1
        if alist[i] > alist[j]:
            break
        else:
            alist[i], alist[j] = alist[j], alist[i]
            i = j
            j = 2 * i


def heap_sort(alist, n):
    for i in range(n // 2 + 1, 0, -1):
        sift(alist, i, n)

    for i in range(1, n):
        alist[1], alist[n - i + 1] = alist[n - i + 1], alist[1]
        sift(alist, 1, n - i)


if __name__ == '__main__':
    alist = [random.randint(1, 100) for _ in range(30)]
    heap_sort(alist, len(alist) - 1)
    print(alist)

使用Python编写的堆排序,测试数据是30个1到100之间的整数。

posted @ 2019-05-27 20:50  一人在山旁  阅读(165)  评论(0)    收藏  举报
Live2D