繁体   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