排序--插入

插入排序:对一个无序的列表进行排序,通过插入排序算法思想
基本思想:要对输入的无序列表进行排序,列表从左至右增大,假设第一个元素是已经
排好了的元素,那么第二个元素就与第一个元素比较,如果大,则不需要移动,如果小了,
则需要先把第一个元素往后移一位,然后再把第二个元素给第一个元素赋值。
举个例子来说明:初始列表:4,8,2,5,1
变量i是当前需要插入的数值,0——j区间是已经排好序的列表下标,因为最右边是最大的,所以j是递减的
对这样的列表排序,假设第一个元素已经排好了,所以遍历的时候从第二个元素开始。
1步:i=1,j=0,8与4比较,因为8大,所以把8值赋给j+1的位置
2步:i=2,j=1,2与8比较,因为2小,所以需要把8赋给j=2的位置,也就是说把列表中2位置的值修改为8,
j=0,2与4比较,因为2小,所以需要把4赋值给j=1的位置,也就是原来列表中8的值修改为4,j=-1,不满足循环条件,退出
执行到list[j+1] = temp这句代码,temp=2,j=-1,因此列表的第一个位置的值为2,即完成了2,4,8的排列
3步:依次类推

主要核心思想就是,插入的数依次与已完成排序列表中最右端的数比较大小,如果小了,列表中的数往右移一位,
接着需要插入的数继续与最右减1的数比较大小,依次遍历完成。

python代码:
def insertSort(list):
    for i in range(1,len(list)):
        temp = list[i]
        j = i - 1
        #值小才需要移动
        while j >=0 and temp < list[j]:
            list[j + 1] = list[j]
            j -= 1
        list[j+1] = temp

    return list

def main():
    listData = list(map(int,input("请输入需要排序的列表,逗号间隔:").split(",")))
    sortedList =  insertSort(listData)
    print("排序后的列表为:",end = "")
    print(sortedList)

if (__name__ == "__main__"):
    main()

 

 
posted @ 2020-03-25 15:11  StudyNLP  阅读(135)  评论(0编辑  收藏  举报