您的位置:首页 > 其它

图示经典算法--自顶向下的归并排序

2016-03-26 15:54 239 查看

自顶向下的归并排序

归并排序使用分治思想,将两个子数组排序,通过归并两个子数组来将整个数组排序

class TopDownMergeSort():
"""自顶向下的归并排序"""

@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 merge_sort(cls, a, lo, hi):
if hi <= lo:
return
mid = lo + (hi - lo) // 2
# 对左侧进行排序
cls.merge_sort(a, lo, mid)
# 对右侧进行排序
cls.merge_sort(a, mid + 1, hi)
# 归并结果
cls.merge(a, lo, mid, hi)

@classmethod
def sort(cls, a):
n = len(a)
cls.aux = [0] * n
cls.merge_sort(a, 0, n-1)


排序流程



时间复杂度:O(nlogn)

示例代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 归并排序