Python: 插入排序逻辑失败但我不确定为什么

Python: Insertion sort logic is failing but i'm not sure why

我向自己提出了一个挑战,即在不查找代码示例的情况下重新创建一个插入排序,只是从“的伪代码” pop Number out array,与同索引点的数比较,如果Number小于数组索引点的数,则将数组向下移动-1,当数组索引点的值小于Number时,插入到那时,” 我已经将这件事重写了 4 次,我宁愿有方向而不是仅仅谷歌搜索答案,

我自学编码,我喜欢限制自己,因为我相信这样会更有纪律

他是代码, 它似乎可以在 while 循环的 1 次迭代中工作,但不会更进一步,

array = [3,2,1,0] 得到 [2, 1, 0, 3]

testArray = [3,2,1,0]
index = 0
for n in testArray:
    tempIndex = index - 1
    if index > 0:
        if n < testArray[tempIndex]:
                testArray.pop(index)
                while True:
                    if testArray[tempIndex] < n:
                        tempIndex -= 1
                    else:
                        break
                testArray.insert(tempIndex,n)
    index += 1

编辑:删除调试器以压缩代码

我认为你没有正确回溯,这就是为什么你要面对那种 issue.But 我正确解决 it.See 它。

testArray = [3,2,1,0]
index = 0
for n in testArray:
    tempIndex = index - 1
    
    print("index:     ",index)
    print("tempIndex: ",tempIndex)
    if index > 0:
        if n < testArray[tempIndex]:
                testArray.pop(index)
                while True:
                    print("While loop: ",testArray[tempIndex])
                    if testArray[tempIndex] < n:
                        tempIndex -= 1
                    else:
                        break
                testArray.insert(tempIndex,n)
                print("TestArray:-----> ",testArray)
                count=tempIndex
                print("count: ",count)
                while(testArray[count]<testArray[count-1]):
                  #Swap value till the start of the testArray[0]
                  temp = testArray[count]
                  testArray[count]= testArray[count-1]
                  testArray[count-1] = temp
                  print("TestArray:---swap->  ",testArray)
                  if(count != 1):
                    count = count-1
                print("TestArray: ",testArray)
    index += 1

大量使用 Print 语句来检查您的逻辑(思维)是否工作正常,代码是否相应工作:

index:      0
tempIndex:  -1
index:      1
tempIndex:  0
While loop:  3
TestArray:----->  [2, 3, 1, 0]
count:  0
TestArray:  [2, 3, 1, 0]
index:      2
tempIndex:  1
While loop:  3
TestArray:----->  [2, 1, 3, 0]
count:  1
TestArray:---swap->   [1, 2, 3, 0]
TestArray:  [1, 2, 3, 0]
index:      3
tempIndex:  2
While loop:  3
TestArray:----->  [1, 2, 0, 3]
count:  2
TestArray:---swap->   [1, 0, 2, 3]
TestArray:---swap->   [0, 1, 2, 3]
TestArray:  [0, 1, 2, 3]