1.思路整理
所谓插入排序,就是简单的取出一个值然后和放在数组或列表中合适的位置(在前面元素中比较并找到位置),当然由于顺序表的特性,插入和修改数据往往要同时调动其他元素,个人倾向于使用链表,但这里仍使用列表实现。
2.举例说明:
值:2 5 1 4 8
标:0 1 2 3 4
第1轮.为了方便移位操作从下标1开始取,取出下标1的值:5,用其之前的元素与之对比操作
当前操作对象为下标1
下标0与取出值5对比 2<5 下标0不进行操作
此次执行后列表值为:
值:2 5 1 4 8
标:0 1 2 3 4
将取出值5赋予当前操作下标,即下标1赋值为5,此次执行后列表值为:
值:2 5 1 4 8
标:0 1 2 3 4
本轮循环结束,交换后的值为:
值:2 5 1 4 8
标:0 1 2 3 4
第2轮.指针后移,取出下标2的值:1
下标1与取出值1对比 5>1 下标1后移,即下标2赋值下标1
此次执行后列表值为:
值:2 5 5 4 8
标:0 1 2 3 4
指针前移,当前操作对象为下标1
下标0与取出值1对比 2>1 下标0后移,即下标1赋值下标0
此次执行后列表值为:
值:2 2 5 4 8
标:0 1 2 3 4
指针前移,当前操作对象为下标0
由于下标0前方已无元素,将取出值1赋予当前操作下标,即下标0赋值为1,此次执行后列表值为:
值:1 2 5 4 8
标:0 1 2 3 4
本轮循环结束,交换后的值为:
值:1 2 5 4 8
标:0 1 2 3 4
第3轮.指针后移,取出下标3的值:4
下标2与取出值4对比 5>4 下标1后移,即下标3赋值下标2
此次执行后列表值为:
值:1 2 5 5 8
标:0 1 2 3 4
指针前移,当前操作对象为下标2
下标1与取出值4对比 2<4 下标0不进行任何操作
此次执行后列表值为:
值:1 2 5 5 8
标:0 1 2 3 4
将取出值4赋予当前操作下标,即下标2赋值为4,此次执行后列表值为:
值:1 2 4 5 8
标:0 1 2 3 4
本轮循环结束,交换后的值为:
值:1 2 4 5 8
标:0 1 2 3 4
第4轮.指针后移,取出下标4的值:8
下标3与取出值8对比 5<8 下标1 不进行任何操作
此次执行后列表值为:
值:1 2 4 5 8
标:0 1 2 3 4
将取出值4赋予当前操作下标,即下标4赋值为8,此次执行后列表值为:
值:1 2 4 5 8
标:0 1 2 3 4
本轮循环结束,交换后的值为:
值:1 2 4 5 8
标:0 1 2 3 4
循环结束
3.代码实现
#插入排序
#一个列表
t=[4,2,1,3,7,5,6,8,9,10]
#依次遍历要取出的数
for i in range(1,len(t)):
#将取出的数存储于变量k
k=t[i]
j=i
#用当前操作下标与之前的元素进行对比
while t[j-1]>k and j>=1:
#前移
t[j]=t[j-1]
j-=1
t[j]=k
print(t)