插入排序及python實現

假設數列第一個元素爲已排序數列,剩餘數列爲未排序將待排序元素挨個插入到已排序數列中每次插入都必須保證數列是有序的,即通過比較和移動有序數列中的元素,將元素插入到合適的位置。
插入排序維持一個已排好序的子列表,其位置始終在列表的前部,然後逐步擴大這個子列表直至全表

思路:如同玩撲克牌一樣,每次摸牌都將它與手中的牌比較,始終將牌放在比它大的牌前面,比它小的牌後面。這樣當牌全部摸到手上後,就是一個有序的序列。

實現過程:

  • 第1趟,子列表僅包含第1個數據項,將第2個數據項作爲“新項”插入到子列表的合適位置中,這樣已排序的子列表就包含了2個數據項;
  • 第2趟,再繼續將第3個數據項跟前2個數據項比對,並移動比自身大的數據項,空出位置來,以便加入到子列表中;
  • 經過n-1趟比對和插入,子列表擴展到全表,排序完成。
def insertionSort(alist):
    for index in range(1, len(alist)):
        # 新項/插入項
        currentvalue = alist[index]
        position = index
        while position > 0 and alist[position - 1] > currentvalue:
            # 從新項的前面的位置開始,在已經排好的子序列中從後向前比對和移動,
            # 直到找到第一個比currentvalue小的項,while循環退出,position指
            # 向第一個比新項小的項的後面的位置
            # 第i-1個元素的值轉移到第i個元素上(值向後移動)
            alist[position] = alist[position - 1]
            position = position - 1
        alist[position] = currentvalue # 插入新項
alist = [54, 26, 93, 17, 77, 31, 44, 55, 20]
insertionSort(alist)
print(alist)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章