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

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


สมมติว่าเราได้รับอาร์เรย์และขอให้ทำการเรียงลำดับการแทรก ในการเรียงลำดับการแทรก แต่ละองค์ประกอบในอาร์เรย์จะเลื่อนไปยังตำแหน่งที่ถูกต้องในอาร์เรย์ เราต้องหาจำนวนกะทั้งหมดที่จำเป็นในการจัดเรียงอาร์เรย์ จำนวนการเปลี่ยนแปลงทั้งหมดเป็นตัวเลขจำนวนเต็ม และหากจัดเรียงอาร์เรย์แล้ว เราจะคืนค่า 0

ดังนั้น หากอินพุตเป็นเหมือน input_array =[4, 5, 3, 1, 2] เอาต์พุตจะเป็น 8

<ก่อน>[4, 5, 3, 1, 2] =0 กะ[4, 5, 3, 1, 2] =0 กะ[3, 4, 5, 1, 2] =2 กะ[1, 3, 4, 5, 2] =3 กะ[1, 2, 3, 4, 5] =3 กะ

จำนวนกะทั้งหมด =0 + 0 + 2 + 3 + 3 =8.

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

  • ความยาว :=ขนาดของ input_arr
  • temp_arr :=รายการขนาดใหม่ 1000001 เริ่มต้นด้วย 0s
  • ตอบ :=0
  • สำหรับแต่ละรายการใน input_arr ทำ
    • val :=item
    • ในขณะที่ val> 0, ทำ
      • ans :=ans + temp_arr[val]
      • val :=val - (val AND -val)
    • val :=item
    • ในขณะที่วาล <=1000000 ทำ
      • temp_arr[val] :=temp_arr[val] + 1
      • val :=val + (val AND -val)
  • ans :=length * (ค่าพื้นของ (ความยาว - 1) / 2) - ans
  • คืนสินค้า

ตัวอย่าง

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

def Solve(input_arr):length =len(input_arr) temp_arr =[0] * 1000001 ans =0 สำหรับรายการใน input_arr:val =รายการในขณะที่ val> 0:ans +=temp_arr[val] val -=val &-val val =รายการในขณะที่ val <=1000000:temp_arr[val] =temp_arr[val] + 1 val +=val &-val ans =ความยาว * (ความยาว - 1) // 2 - ans ส่งคืน ansprint([4 , 5, 3, 1, 2]))

อินพุต

[4, 5, 3, 1, 2]

ผลลัพธ์

8