在Python中查找排序数组所需的交换次数的程序

在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次交换以使数组按升序排序。

为了解决这个问题,我们将遵循以下步骤−

  • 定义一个名为swap_count()的函数。这将采用input_arr作为输入。
    • pos:为每个item in input_arr创建一个包含元组(item_position,item)的新列表
    • 根据input_arr对列表pos进行排序
    • 将cnt设为0
    • 对于范围从0到input_arr大小的索引
      • while True,执行以下操作
      • 如果pos [index,0]与index相同,则执行以下操作
        • 退出循环
      • 否则,执行以下操作
        • cnt:= swap_count + 1
        • swap_index:= pos [index,0]
        • 交换(pos [index],pos [swap_index])的值
    • 返回cnt
  • 从主函数/方法中执行以下操作−
    • 返回(swap_count(input_arr),swap_count(input_arr in reverse order))的最小值

例子

让我们看一下以下实现,以便更好地理解−

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教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程