问什么这里的插入排列的c[position+1]=c[position]里面的position+1不能用index代替
alist1=[22,34,43,47,52,69,76,79,88,90]
alist2=[0,5,12,20,49,61,68,72,78,87]
def insert_sort(a_list,b_list):
c=[]
for x in range(len(a_list)):
c.append(a_list[x])
for y in range(len(b_list)):
c.append(b_list[y])
print(c)
for index in range(1,len(c)):
current_value=c[index]
position=index-1
while position >=0 and c[position]>current_value:
c[position+1]=c[position]
position-=1
c[position+1]=current_value
print(c)
insert_sort(alist1,alist2)
因为当while循环的时候,position的数值是递减到零的,而外层for循环里的index是保持不变的,可以理解为index是position的最大值。
position=index-1 这两个变量数值不一样
外层for循环的变量我理解是不能用到内层while循环中的
原理:先将数组中一部分数进行排序,再将数组中还未排序的数与已排序的数逐一进行比较,每一次比较都判断二者的大小关系,大的数右移,为小的数腾出位置,直到遇到比这个数小的为止,该数即"插入"到此处左移,接着将下一个未排序的数与左边已排序好的数逐一比较重复这一过程。
1、刚开始,我们认为数字下标0的元素是有序的,将下标1的元素b与下标为0的元素a比较,如果b < a, 这互换位置,此时数组0-1下标的元素序列是有序的
2、之后我们将下标为2的元素c插入到前边的有序数组中,将元素C与已排序的数逐一进行比较,大的数右移,为小的数腾出位置,直到遇到比这个数小的为止
3、接着将下标为3的元素c插入到前边的有序数组中,以此类推,直至到最后一个元素
所以,index代表当前你要将下标为index 的元素插入到 前边的有序数组中