0

私はCLRSの本に従っており、Pythonですべてのアルゴリズムを実装しています。これはマージソートアルゴリズムです。テスト配列でマージ関数をテストしたところ、動作するため、merge_sort 関数である必要がありますが、本の疑似コードとほとんど同じです。

def merge_sort(self, array, p, r):
    if p < r:
        q = int((p + r) / 2)

        self.merge_sort(array, p, q)
        self.merge_sort(array, q + 1, r)
        self.merge(array, p, q , r)

def merge(self, array, p, q, r):
    n1 = q - p + 1
    n2 = r - q
    left = []
    right = []

    for i in range(0, n1):
        left.append(array[p + i])

    for j in range (0, n2):
        right.append(array[q + j + 1])

    left.append(math.inf)
    right.append(math.inf)
    i = 0
    j = 0

    for k in range(p, r):
        if left[i] <= right[j]:
            array[k] = left[i]
            i += 1
        else:
            array[k] = right[j]
            j += 1
4

1 に答える 1

0

私はこれを推測するつもりです:

for k in range(p, r):

次のようにする必要があります。

for k in range(p, r + 1):

これにより、p から r - 1 までの値を取得する前に、k が p から r までのすべての値を取得するようになります。

于 2016-02-15T07:04:05.000 に答える