在Python中实现/运行合并排序

时间:2017-09-14 19:43:43

标签: python

我正在用python编写一个程序,我正在尝试实现合并排序算法(并使用一个名为merge的函数来处理合并步骤),我在下面得到一个错误。我将L = [2,6,4,8,1]传递给合并排序的参数:

>>> L = [2, 6, 4, 8, 1]
>>> mergeSort(L)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    mergeSort(L)
  File "H:\CSIS 4014\WinPython-64bit-3.5.3.1Qt5\notebooks\sorts.py", line 19, in mergeSort
    mergeSort(left)
  File "H:\CSIS 4014\WinPython-64bit-3.5.3.1Qt5\notebooks\sorts.py", line 21, in mergeSort
    merge(L, left, right, p, q, r)
  File "H:\CSIS 4014\WinPython-64bit-3.5.3.1Qt5\notebooks\sorts.py", line 24, in merge
    left[len(left)+1] = 999999
IndexError: list assignment index out of range

以下是我的源代码:

def mergeSort(L) :
    p = 0
    r = len(L) - 1
    if p < r :
        q = math.floor((p + r) / 2)
        left = L[:q]
        right = L[q+1:]
        mergeSort(left)
        mergeSort(right)
        merge(L, left, right, p, q, r)

def merge(L, left, right, p, q, r) :
        left[len(left)+1] = 999999
        right[len(right)+1] = 999999
        i = 1
        j = 1
        k = p 
        for k in range(r) :
                if left[i] <= right[j] :
                        L[k] = left[i]
                        i = i + 1
                elif L[k] == right[j] :
                        j = j + 1

我正在尝试将切片用于子阵列左右两侧的变量,以及跟随我的教科书中的伪代码。我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:1)

left[len(left)+1] = 999999

这总是一个错误...你特意试图写入一个不存在的元素。列表的最后一个元素位于left[len(left) - 1]。写入超出该范围的任何索引都是错误。

也许你想要追加?

left.append(999999)