以降序顺序计算要对列表排序的交换数

2024-09-28 16:23:15 发布

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

我正在尝试按降序对列表进行排序,并获取按降序排序列表所需的交换数[3,1,2]→[3,2,1]。i、 使用python从列表的最高元素到最低元素。我的功能是按递增顺序对列表进行排序,即[3,1,2]→[1,2,3]。我如何按降序排序,并得到排序列表所需的交换次数?在

            def count_inversions(ratings):
                swap = 0;
                for i in range(len(ratings)):
                    if(i + 1 != ratings[i]):
                        t = i 
                        while(ratings[t] != i+1):
                            t++
                        temp = ratings[t]
                        ratings[t] = ratings[i]
                        ratings[i] = temp
                        swap = swap + 1

                return swap

Tags: in功能元素列表for排序顺序def
1条回答
网友
1楼 · 发布于 2024-09-28 16:23:15

我前段时间写了一个气泡排序代码,可能对你有帮助

def bubble_sort(arr, reversed=False):
    swap_cnt = 0
    i = len(arr) - 1
    while i > 0:
        for j in range(i):
            if not reversed:
                if arr[j] > arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
                    swap_cnt += 1
            if reversed:
                if arr[j] < arr[j+1]:
                    arr[j], arr[j+1] = arr[j+1], arr[j]
                    swap_cnt += 1
        i -= 1
    print('Number of swaps: {}'.format(swap_cnt))
    return arr

if __name__ == "__main__":
    print(bubble_sort([2, 4, 8, 5, 1, 9, 4]))
    print(bubble_sort([2, 4, 8, 5, 1, 9, 4], reversed=True))

相关问题 更多 >