合并排序:如何按递减方式排序?

2024-03-28 08:58:34 发布

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

我对合并排序感兴趣。我编写了合并步骤来按升序排序,它可以工作(请参阅下面的代码)。但当我试图调整代码,使其以递减的方式排序时,我做不到。我想把I和j颠倒过来,但似乎不起作用。有人有什么想法吗?你知道吗

def fusion(A,low,mid,high):
    aux = [2,7,8,3,6,9]
    i = low
    j = mid+1
    for k in range(low,high,1):
        if i>mid:
            A[k] = aux[j]
            j = j+1
        elif j > high:
            A[k] = aux[i]
            i = i+1
        elif aux[i] <= aux[j]:
            A[k] = aux[i]
            i = i+1
        else:
            A[k] = aux[j]
            j = j+1
    return A
fusion([2,7,8,3,6,9],0,2,5)

输出是2,3,6,7,8,9,但是我想要9,8,7,6,3,2


Tags: 代码for排序def方式请参阅步骤感兴趣
1条回答
网友
1楼 · 发布于 2024-03-28 08:58:34

以下是“反向”变体:

def fusion(A, low, mid, high):
    aux = A[::-1]  # reverse A
    i = low
    j = mid + 1
    for k in range(low, high, 1):
        if i > mid:
            aux[-k - 1] = A[j]
            j += 1
        elif j > high:
            aux[-k - 1] = A[i]
            i += 1
        elif A[i] <= A[j]:
            aux[-k - 1] = A[i]
            i += 1
        else:
            aux[-k - 1] = A[j]
            j += 1
    return aux


print(fusion([2, 7, 8, 3, 6, 9], low=0, mid=2, high=5))

或者倒过来range()

def fusion(A, low, mid, high):
    aux = A[::-1]  # reverse A
    i = low
    j = mid + 1
    for k in range(high, low, -1):
        if i > mid:
            aux[k] = A[j]
            j += 1
        elif j > high:
            aux[k] = A[i]
            i += 1
        elif A[i] <= A[j]:
            aux[k] = A[i]
            i += 1
        else:
            aux[k] = A[j]
            j += 1
    return aux

或者只是。。。你知道吗

list(reversed(fusion([2, 7, 8, 3, 6, 9], 0, 2, 5)))

相关问题 更多 >