直接插入排序 Python实现

直接插入排序(Straight Insertion Sort)

基本思想

    往已有的有序序列中插入需要排序的值 已排序完毕的数列是有序的 将第一个元素看做一个有序的序列,从第二个元素开始一直往前插入排序 每次插入得到元素个数加1的新序列 如果碰见一个和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后顺序没有改变,从原无序序列出去的顺序就是排好序后的顺序,保证插入排序是稳定的
def insert_sort(arr):
    n = len(arr)
    for i in range(1,n):# 如果大于arr[i-1]就就直接插在最后开始下一个
        if arr[i]<arr[i-1]: #将第i个元素与前一个已排好序列的最后一个比较
            j = i - 1
            temp = arr[i] # 记录当前待排序的元素
            arr[i] = arr[i-1] # 将待排序元素向前移动一位
            while temp<arr[j] and j>=0: # 判断待排序元素与前一位的大小,由于Python的列表存在负索引,这里要判断j>=0
                arr[j+1] = arr[j] #元素后移
                j = j -1 
            arr[j+1] = temp # 插入
        showarr(arr,i) # 打印每一趟排序的结果


def showarr(arr,i):
    print("第"+str(i)+"次:",end=)
    n = len(arr)
    for j in range(n):
        print(arr[j],end= )
    print(
)


def test():
    arr = [4,6,2,3,6,7,8,1,16,5]
    insert_sort(arr)

if __name__ == __main__:
    test()
每次比较的时候与前面排好序的序列的最后一个元素开始比较,比它大就开始下一个排序,比它小则继续往前比较,找到>=的位置插入
经验分享 程序员 微信小程序 职场和发展