图示经典算法--自底向上的归并排序

来源:互联网 发布:js监听屏幕大小变化 编辑:程序博客网 时间:2024/05/16 04:24

自底向上的归并排序

自底向上的归并排序使用分治思想,将数组先两两归并,再四四归并,然后八八归并,直到整个数组有序。

class MergeBU(object):    """docstring for MergeBU"""    @classmethod    def merge(cls, a, lo, mid, hi):        # 将a[lo...hi]复制到aux[lo...hi]        cls.aux[lo:hi + 1] = a[lo:hi + 1]        i = lo        j = mid + 1        k = lo        # 归并会a[lo...hi]        while i <= mid and j <= hi:            if cls.aux[i] < cls.aux[j]:                a[k] = cls.aux[i]                k += 1                i += 1            else:                a[k] = cls.aux[j]                k += 1                j += 1        n = mid + 1 - i        a[k:k + n] = cls.aux[i:mid + 1]        k += n        n = hi + 1 - j        a[k:k + n] = cls.aux[j:hi + 1]    @classmethod    def sort(cls, a):        # lgN次两两归并        n = len(a)        cls.aux = [0] * n        # sz子数组大小        sz = 1        while sz < n:            # lo子数组索引            lo = 0            while lo < n - sz:                cls.merge(a, lo, lo + sz - 1, min(lo + sz + sz - 1, n - 1))                lo += (sz + sz)            sz += sz

bottom_up_mergesort_tiny.gif

0 0
原创粉丝点击