堆排序Python实现

#!/usr/bin/python
# -*- coding: UTF-8 -*-


# 是否倒序
r = False


# 下沉
def sink(a, i, n):
    while i * 2 + 1 <= n:
        j = i * 2 + 1
        if j + 1 <= n and compare(a, j + 1, j):
            j += 1
        if compare(a, j, i):
            swap(a, i, j)
            i = j
        else:
            break


def compare(a, i, j):
    return a[i] > a[j] if not r else a[i] < a[j]


def swap(a, i, j):
    t = a[i]
    a[i] = a[j]
    a[j] = t


def init(a):
    le = len(a)
    ei = le - 1
    si = le / 2 - 1
    while si >= 0:
        sink(a, si, ei)
        si -= 1


def adjust(a):
    ei = len(a) - 1
    while ei > 0:
        swap(a, 0, ei)
        ei -= 1
        sink(a, 0, ei)


def heap_sort(a):
    init(a)
    adjust(a)
    print a


heap_sort([3, 1, 2, 5, 6, 9, 6, 0, 4, 0])

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容