【问题标题】:understanding insertion sort in python理解python中的插入排序
【发布时间】:2019-11-30 16:51:16
【问题描述】:

我在 python 中遇到了以下用于插入排序的代码。这按预期工作。但是,当我试图跟踪程序时,我被卡住了

def insertionSort(array):
for step in range(1, len(array)):
    key = array[step]
    j = step - 1
    while j >= 0 and key < array[j]:
        # For descending order, change key<array[j] to key>array[j].
        array[j + 1] = array[j]
        j = j - 1
    array[j + 1] = key
data = [4, 9, 2, 1, 3]
insertionSort(data)
print('Sorted Array in Ascending Order:')
print(data)

在下面的sn-p中跟踪数组数据。

**1st iteration of for loop**
key = array[1] = 9
j = 1 - 1 = 0
array[j] = array[0] = 4
While 0>=0 and 9 < 4: - condition not satisfied
Now, array[j+1] = key, which means array[1] = 9

数组没有变化

**2nd iteration of for loop**
key = array[2] = 2
j = 2 - 1 = 1
array[j] = array[1] = 9
while 1>=0 and 2 < 9: - condition satisfied
array[j + 1] = array[j]
array[1 + 1] = array [1]
array[2] = array [1]

This means array[2] value becomes 9 now. 

Further, j = j -1, which means j = 0 now
Now, array[j + 1] = key
which means array[0 +1] = 2, so array[1]=2. 

所以,到目前为止,数组的顺序是这样的,[4,2,9,1,3]

这样下去,最后怎么排序?

【问题讨论】:

    标签: python sorting arrays python-3.x


    【解决方案1】:

    我将在演练中使用 2 个差异化因素。 斜体 数字是我们当前在 for 循环中指向的位置。 粗体数字是我们在 while 循环中“跟随”的数字。


    开始: arr =[4, 2, 9, 1, 3] 正如你所说,我们知道 2 比 9 好,所以我们交换了它们。现在我们将 2 与之前的位置进行比较:4

    2

    [2, 4, 9, 1, 3]

    由于 2 位于第 0 位,我们停止并移动到 for 循环的下一部分,所以现在我们在这里:

    [2, 4, 9, 1, 3]

    1

    [2, 4, 1, 9, 3]

    1

    [2, 1, 4, 9, 3]

    1

    [1, 2, 4, 9, 3]

    1 位于第 0 位,因此将斜体颠倒过来并最后一次重复(声速)

    [1, 2, 4, 9, 3]

    [1, 2, 4, 3, 9]

    [1, 2, 3, 4, 9]

    3 !

    最终数组:

    [1, 2, 3, 4, 9]

    希望这会有所帮助。

    【讨论】:

    • Start: arr =[4, 2, 9, 1, 3] 正如你所说,我们知道 2 比 9 好,所以我们交换了它们。现在我们将 2 与它之前的位置进行比较: 4 2
    • while j >= 0 and key array[j]。 array[j + 1] = array[j] j = j - 1 array[j + 1] = key ///// 在这个部分。 j(所以现在是 4)是 0 并且 key (2)
    【解决方案2】:

    我的错。我没有考虑的是,这是while条件循环

    while j >= 0 and key < array[j]:
    

    只要 j >= 0 并且对于 for 的第一次运行,键

    在嵌套循环中,内部循环对所有条件、外部循环的每个条件都进行完整的迭代。我没有考虑这一点,并且每次都开始同时跟踪 for 和 while 循环。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2023-03-10
      • 2017-03-11
      • 1970-01-01
      相关资源
      最近更新 更多