Python合并排序

时间:2014-12-29 12:40:23

标签: python sorting merge mergesort

我是python的新手。我无法理解程序在" print(" Merging",alist)"之后如何被定向回mergeSort。任何人都能解释一下吗?感谢

  def mergeSort(alist):
    print("Splitting ",alist)
3    if len(alist)>1:
        mid = len(alist)//2
        lefthalf = alist[:mid]
        righthalf = alist[mid:]

8      mergeSort(lefthalf)
9      mergeSort(righthalf)

        i=0
        j=0
        k=0
        while i<len(lefthalf) and j<len(righthalf):
            if lefthalf[i]<righthalf[j]:
                alist[k]=lefthalf[i]
                i=i+1
            else:
                alist[k]=righthalf[j]
                j=j+1
            k=k+1

        while i<len(lefthalf):
            alist[k]=lefthalf[i]
            i=i+1
            k=k+1

        while j<len(righthalf):
            alist[k]=righthalf[j]
            j=j+1
            k=k+1
32     print("Merging ",alist)

alist = [54,26,93,17,77,31,44,55,20]
mergeSort(alist)
print(alist)

1 个答案:

答案 0 :(得分:0)

当我运行你的程序时,我得到:

('Splitting ', [54, 26, 93, 17, 77, 31, 44, 55, 20])
('Splitting ', [54, 26, 93, 17])
('Splitting ', [54, 26])
('Splitting ', [54])
('Merging ', [54])
('Splitting ', [26])
('Merging ', [26])
('Merging ', [26, 54])
('Splitting ', [93, 17])
('Splitting ', [93])
('Merging ', [93])
('Splitting ', [17])
('Merging ', [17])
('Merging ', [17, 93])
('Merging ', [17, 26, 54, 93])
('Splitting ', [77, 31, 44, 55, 20])
('Splitting ', [77, 31])
('Splitting ', [77])
('Merging ', [77])
('Splitting ', [31])
('Merging ', [31])
('Merging ', [31, 77])
('Splitting ', [44, 55, 20])
('Splitting ', [44])
('Merging ', [44])
('Splitting ', [55, 20])
('Splitting ', [55])
('Merging ', [55])
('Splitting ', [20])
('Merging ', [20])
('Merging ', [20, 55])
('Merging ', [20, 44, 55])
('Merging ', [20, 31, 44, 55, 77])
('Merging ', [17, 20, 26, 31, 44, 54, 55, 77, 93])
[17, 20, 26, 31, 44, 54, 55, 77, 93]

分裂:

以下是分析:

1)你的数组首先进入alist

2)然后将数组的左半部分拆分并作为alist

3)剩下的一半是agian被视为alist

4)现在你的名字是54

一旦你想到这一点,看到同样的模式再次完成到右半边。

这是递归。

合并:

1)合并排序的核心,合并2个数组。

2)在每个阶段合并2个阵列。

3)每次拆分一直到单个元素时,就完成2个数组的合并。

希望这会有所帮助。要了解更多信息,请查看合并排序的YouTube视频。