用于查找在 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

以上是 用于查找在 Python 中对数组进行排序所需的交换次数的程序 的全部内容, 来源链接: utcz.com/z/338688.html

回到顶部