用于查找在 Python 中对数组进行排序所需的交换次数的程序
假设,我们有一个名为nums的数组,我们必须找到使nums以任何顺序(升序或降序)排序所需的交换次数。
因此,如果输入类似于nums=[2,5,6,3,4],那么输出将为2,因为最初nums有[2,5,6,3,4]。如果我们交换数字6和4,数组将是[2,5,4,3,6]。然后,如果我们交换数字5和3,数组将是[2,3,4,5,6]。因此需要2次交换才能使数组按升序排序。
示例
让我们看看以下实现以获得更好的理解-
def swap_count(input_arr): pos = sorted(list(enumerate(input_arr)), key=lambda x: x[1]) cnt = 0 for index in range(len(input_arr)): while True: if (pos[index][0] == index): break else: cnt += 1 swap_index = pos[index][0] pos[index], pos[swap_index] = pos[swap_index], pos[index] return cnt def solve(input_arr): return min(swap_count(input_arr), swap_count(input_arr[::-1])) nums = [2, 5, 6, 3, 4] print(solve(nums))
输入
[2, 5, 6, 3, 4]输出结果
2