簡體   English   中英

插入排序 - Python

[英]Insertion sort - Python

我正在嘗試使用 python 上的 min() function 實現插入排序。 它適用於大多數情況,但是當我不止一次插入 0 的值時,整個事情都會崩潰。 代碼如下:

def sortArray(self, nums: List[int]) -> List[int]:
        # Selection sort 
        for i in range(len(nums)):
            temp = nums[i]
            index = nums.index((min(nums[i:])))
            print(f"val = {nums[index]} nums[{i}:]")
            nums[i] = min(nums[i:])
            nums[index] = temp
            print(f"Step : {i} -- {nums}")
        return nums

對於測試用例 [-100, 0, 0, -1, -4, 0, 200, 30, 4000, 32, -19] 我收到以下 output:

val = -100 nums[0:]
Step : 0 -- [-100, 0, 0, -1, -4, 0, 200, 30, 4000, 32, -19]
val = -19 nums[1:]
Step : 1 -- [-100, -19, 0, -1, -4, 0, 200, 30, 4000, 32, 0]
val = -4 nums[2:]
Step : 2 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = -1 nums[3:]
Step : 3 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[4:]
Step : 4 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[5:]
Step : 5 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[6:]
Step : 6 -- [-100, -19, -4, -1, 200, 0, 0, 30, 4000, 32, 0]
val = 0 nums[7:]
Step : 7 -- [-100, -19, -4, -1, 200, 30, 0, 0, 4000, 32, 0]
val = 0 nums[8:]
Step : 8 -- [-100, -19, -4, -1, 200, 30, 4000, 0, 0, 32, 0]
val = 0 nums[9:]
Step : 9 -- [-100, -19, -4, -1, 200, 30, 4000, 32, 0, 0, 0]
val = 0 nums[10:]
Step : 10 -- [-100, -19, -4, -1, 200, 30, 4000, 32, 0, 0, 0]

問題是你有重復的零。 在索引 6 處,最小值為 0。當您在整個數組中查找零值時,它會選擇第一個零並將其替換為 200。這是使您的代碼工作的編輯:

def sortArray(self, nums) -> list[int]:
        # Insertion sort 
        for i in range(len(nums)):
            temp = nums[i]
            index = nums[i:].index((min(nums[i:])))
            print(f"val = {nums[i+index]} nums[{i}:]")
            nums[i] = min(nums[i:])
            nums[i+index] = temp
            print(f"Step : {i} -- {nums}")
        return nums

這是 output:

val = -100 nums[0:]
Step : 0 -- [-100, 0, 0, -1, -4, 0, 200, 30, 4000, 32, -19]
val = -19 nums[1:]
Step : 1 -- [-100, -19, 0, -1, -4, 0, 200, 30, 4000, 32, 0]
val = -4 nums[2:]
Step : 2 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = -1 nums[3:]
Step : 3 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[4:]
Step : 4 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[5:]
Step : 5 -- [-100, -19, -4, -1, 0, 0, 200, 30, 4000, 32, 0]
val = 0 nums[6:]
Step : 6 -- [-100, -19, -4, -1, 0, 0, 0, 30, 4000, 32, 200]
val = 30 nums[7:]
Step : 7 -- [-100, -19, -4, -1, 0, 0, 0, 30, 4000, 32, 200]
val = 32 nums[8:]
Step : 8 -- [-100, -19, -4, -1, 0, 0, 0, 30, 32, 4000, 200]
val = 200 nums[9:]
Step : 9 -- [-100, -19, -4, -1, 0, 0, 0, 30, 32, 200, 4000]
val = 4000 nums[10:]
Step : 10 -- [-100, -19, -4, -1, 0, 0, 0, 30, 32, 200, 4000]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM