Python合并

2024-06-11 19:18:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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)

Tags: and程序lenifdefelseprintmid
1条回答
网友
1楼 · 发布于 2024-06-11 19:18:12

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

('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)你的阵型首先被带入

2)然后拆分数组的左半部分,并将其作为一个数组

3)左半部分被视为阿吉安

4)现在你的年龄是54岁

一旦你弄明白了,再看右半部分同样的图案。你知道吗

它是递归。你知道吗

合并:

1)合并排序的核心是两个数组的合并。你知道吗

2)每个阶段合并2个阵列。你知道吗

3)每次拆分到单个元素时,都会合并两个数组。你知道吗

希望这有帮助。要了解更多信息,请查看合并排序上的youtube视频。你知道吗

相关问题 更多 >