直接插入排序 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('\n')


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

if __name__ == '__main__':
    test()

每次比较的时候与前面排好序的序列的最后一个元素开始比较,比它大就开始下一个排序,比它小则继续往前比较,找到>=的位置插入

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章