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

每次比較的時候與前面排好序的序列的最後一個元素開始比較,比它大就開始下一個排序,比它小則繼續往前比較,找到>=的位置插入

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