难以理解插入排序中的一行 (Python 3)
Trouble understanding one line in Insertion Sort (Python 3)
我正在查看有关插入排序的其他线程,但没有找到与我不理解的特定部分相关的答案。
我的完整插入排序算法可以在下面看到。它按预期工作,但我无法弄清楚最后一行的目的。
数组[位置] = 值
让我通过一个例子来解释:
当'for'循环开始时,索引=1。
=> 值 = 数组[1] = 3
=> 位置 = 1
=> 因为 4 > 3,索引 1 的项目与索引 0 的项目交换。
=>位置-=1
=> 位置 = 0
我们现在到了让我感到困惑的那一行:
数组[0] = 值
=> 值 = 数组[索引] = 数组[0] = 3
但是,当 'for' 循环进行第二次迭代时,索引 = 2。
所以立即 value = array[2] 和 position = 2 ?
尽管我知道这最后一行代码是必要的,但我还是看不出它有什么用。
有人可以向我解释一下这最后的逻辑步骤吗?
提前感谢您的宝贵时间和帮助。
array = [4,3,5,6,12,9,8,6]
for index in range (1, len(array)):
value = array[index]
position = index
while position > 0 and array[position - 1] > value:
array[position] = array[position - 1]
position -= 1
array[position] = value
如果没有那条线,你不会真的交换数字,对吗?
index 1:
-> [4,3,5,6,12,9,8,6] (enters while loop)
-> [4,4,5,6,12,9,8,6] ("pushes" 4 to position 1)
-> <waits for while loop to finish>
-> [3,4,5,6,12,9,8,6] (assigns 3 to position 0 since there are no other elements > 3)
index 2:
...
我认为在 for 循环的开始并不是真正需要的,因为它用于在循环内部进行索引。看图
位置变量表示(最后)您最终将插入数字的位置。如果没有最后一行,您就不会在正确的位置 'position' 处插入数字(这将导致之后的索引为 1 )。下面是我的插入排序代码。
def insertionSort(arr):
length = len(arr)
for i in range(1, length):
currNum = arr[i]
j = i - 1
while j >= 0 and currNum < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j+1] = currNum
return arr
我正在查看有关插入排序的其他线程,但没有找到与我不理解的特定部分相关的答案。
我的完整插入排序算法可以在下面看到。它按预期工作,但我无法弄清楚最后一行的目的。
数组[位置] = 值
让我通过一个例子来解释:
当'for'循环开始时,索引=1。
=> 值 = 数组[1] = 3
=> 位置 = 1
=> 因为 4 > 3,索引 1 的项目与索引 0 的项目交换。
=>位置-=1
=> 位置 = 0
我们现在到了让我感到困惑的那一行:
数组[0] = 值
=> 值 = 数组[索引] = 数组[0] = 3
但是,当 'for' 循环进行第二次迭代时,索引 = 2。
所以立即 value = array[2] 和 position = 2 ?
尽管我知道这最后一行代码是必要的,但我还是看不出它有什么用。
有人可以向我解释一下这最后的逻辑步骤吗?
提前感谢您的宝贵时间和帮助。
array = [4,3,5,6,12,9,8,6]
for index in range (1, len(array)):
value = array[index]
position = index
while position > 0 and array[position - 1] > value:
array[position] = array[position - 1]
position -= 1
array[position] = value
如果没有那条线,你不会真的交换数字,对吗?
index 1:
-> [4,3,5,6,12,9,8,6] (enters while loop)
-> [4,4,5,6,12,9,8,6] ("pushes" 4 to position 1)
-> <waits for while loop to finish>
-> [3,4,5,6,12,9,8,6] (assigns 3 to position 0 since there are no other elements > 3)
index 2:
...
我认为在 for 循环的开始并不是真正需要的,因为它用于在循环内部进行索引。看图
位置变量表示(最后)您最终将插入数字的位置。如果没有最后一行,您就不会在正确的位置 'position' 处插入数字(这将导致之后的索引为 1 )。下面是我的插入排序代码。
def insertionSort(arr):
length = len(arr)
for i in range(1, length):
currNum = arr[i]
j = i - 1
while j >= 0 and currNum < arr[j]:
arr[j + 1] = arr[j]
j -= 1
arr[j+1] = currNum
return arr