插入排序算法/排序算法总结

插入算法(插入排序)

原始序列

默认把序列分成两部分【  54("默认这里为有序序列,然后从右边选择最小的数据放到这里"),          26,93,17,77,31,44,55,20】

1.第一次选择列表右部分的无序序列的第一个元素26,把26与54进行比较,26比54小所以26和54交换位置。

结果为:【 26,54,        93,17,77,31,44,55,20】

2.第二次选择列表右部分的无序序列的第一个元素93,把93与54进行比较,93比54大所以54不用动,93放在54后面。

结果为:【 26,54,93,        17,77,31,44,55,20】

3.第三次选择列表右部分的无序序列的第一个元素17,把17与93进行比较,17比93小所以17放在93的左边:

结果如下:

然后17再和54比较,17比54小,所以17放在54的左边

结果如下:

然后17再和26比较,17比26小,所以17放在26的左边

17已经到头了,所以17不用再往前移动。

第四到八次原理与上面相似,始终取出右部分的第一个元素与左部分进行比较,看把右部分的第一个元素放在左部分的哪个位置上。

第一种解决方案如下:

alist=[54,26,93,17,77,31,44,55,20]
for j in range(1,len(alist)):   #代表从下标为1的位置开始拿数与前面的比较,再拿下标为2的数与前面的数进行比较
    i=j                          #i=下标为1的数,下标为2的数。。。
    while i>0:                   #只要元素还没比到第一个位置(自己还没挪到第一个位置)就不断循环
        if alist[i-1]>alist[i]:  #如果元素比他前面的元素要小就交换位置。如果比他前面的元素要大,那自然什么都不用做了
            alist[i-1],alist[i]=alist[i],alist[i-1]
            i-=1                  #交换完成之后让本次从后部拿出的元素再次与前面元素比较,直到前面的元素小于或者等于他然后退出
        # else:                   #else:完全可以省略
        #     break
print(alist)

第二种解决方案如下:

alist=[54,26,93,17,77,31,44,55,20]
for i in range(1,len(alist)):   #代表从下标为1的位置开始拿数与前面的比较,再拿下标为2的数与前面的数进行比较
    for j in range(i,0,-1):
        if alist[j]<alist[j-1]:
            alist[j],alist[j-1]=alist[j-1],alist[j]
print(alist)
#结果为:[17, 20, 26, 31, 44, 54, 55, 77, 93]

猜你喜欢

转载自blog.csdn.net/qq_39112101/article/details/88599730