python - 计算交换次数以按降序对列表进行排序
问题描述
我正在尝试按降序对列表进行排序,并获取按降序对列表进行排序所需的交换次数 [3, 1, 2] → [3, 2, 1]。即使用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
解决方案
我前段时间写了一个冒泡排序代码,它可能对你有帮助
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))
推荐阅读
- python - 为什么当变量变为0时while循环不会停止?(Python)
- java - 用于唯一查询的 Spring/MongoDB 多计数
- sql - 需要 SQL 从子查询生成多行
- angular - NativeScript w/ Angular 9 - ../node_modules/nativescript-ui-sidedrawer/__ivy_ngcc__/angular/side-drawer-directives.js 中的错误
- linux-kernel - 嵌入式 linux 内核分发
- python - keras 变分损失函数量表
- c# - MVVM 多个文本框一个命令
- vue.js - vue v-on:点击问题,动作不起作用
- php - 使用用户输入检查数组以确保非数字受限制 php
- sql - 带有重复键的 SQL 查询