[英]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.