Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาจำนวนสวอปที่จำเป็นในการเรียงลำดับลำดับใน python


สมมติว่าเรามีรายการตัวเลขที่แตกต่างกัน เราต้องหาจำนวนสวอปขั้นต่ำที่จำเป็นในการจัดเรียงรายการตามลำดับที่เพิ่มขึ้น

ดังนั้น หากอินพุตเป็น nums =[3, 1, 7, 5] ผลลัพธ์จะเป็น 2 เนื่องจากเราสามารถสลับ 3 กับ 1 แล้ว 5 และ 7 ได้

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • sort_seq :=เรียงลำดับรายการ nums
  • ตาราง :=แผนที่ใหม่
  • สำหรับแต่ละดัชนี i และค่า n เป็น nums ทำ
    • ตาราง[n] :=ฉัน
  • สลับ :=0
  • สำหรับ i ในช่วง 0 ถึงขนาดของ nums ให้ทำ
    • n :=nums[i]
    • s_n :=sort_seq[i]
    • s_i :=ตาราง[s_n]
    • ถ้า s_n ไม่เหมือนกับ n แล้ว
      • สวอป :=สวอป + 1
      • nums[s_i] :=n
      • nums[i] :=s_n
      • ตาราง[n] :=s_i
      • ตาราง[s_n] :=ฉัน
  • คืนสวอป

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

โค้ดตัวอย่าง

class Solution:
def solve(self, nums):
   sort_seq = sorted(nums)
   table = {}

   for i, n in enumerate(nums):
      table[n] = i
   swaps = 0
   for i in range(len(nums)):
      n = nums[i]
      s_n = sort_seq[i]
      s_i = table[s_n]

      if s_n != n:
         swaps += 1
         nums[s_i] = n
         nums[i] = s_n
         table[n] = s_i
         table[s_n] = i

      return swaps

ob = Solution()
nums = [3, 1, 7, 5]
print(ob.solve(nums))

อินพุต

[3, 1, 7, 5]

ผลลัพธ์

2