Python_插入排序

Python 插入排序

插入排序的基本思想是將列表分爲兩段,(左邊,當前元素值,右邊)。位置(position)從索引1開始,首先當前位置的值和當前位置的左邊一個元素做比較,由於剛開始當前位置左邊只有一個元素,所以左邊是已經拍好順序的,插入排序的核心就是左邊任何時候都是已經拍好順序的。噹噹前位置和當前位置左邊元素比較的時候,如果當前位置的左邊一個元素的值大於當前位置元素值,那麼當前位置左邊一個元素的值需要往右移動一位,就是覆蓋當前位置的值,同時,當前位置的指針往左移動一位繼續比較。
代碼實現如下:

# -*- coding: utf-8 -*-
# @Time    : 2018/6/4 16:38
# @Author  : li
# @File    : insertion_sort.py

import random

def insertion_sort(array):

    for index in range(1, len(array)):
        # 記錄當前元素值
        current_value = array[index]
        position = index
        # 只有在當前位置大於0,而且當前位置左邊元素大於當前位置元素的時候
        # 才需要將當前位置左邊的一個元素往右移動一位,並且當前位置往左移動一位
        while position > 0 and array[position-1] > current_value:
            array[position] = array[position-1]
            position -= 1
        # 直到直到一位元素不比current_value小,或者已經將左邊所有元素比較完。
        # 記住左邊永遠是已經排好順序的
        # 當將當前位置左邊所有的元素都排好順序之後,將current_value的值賦給當前位置元素
        array[position] = current_value
        print(array)
    return array

if __name__=="__main__":

    array = [random.randrange(10000+i) for i in range(10)]
    sort = insertion_sort(array)
    print "-------------插入排序之後----------------"
    print sort

輸出結果:

[6214, 7016, 3964, 1557, 2931, 1191, 3255, 5596, 9599, 6182]
[3964, 6214, 7016, 1557, 2931, 1191, 3255, 5596, 9599, 6182]
[1557, 3964, 6214, 7016, 2931, 1191, 3255, 5596, 9599, 6182]
[1557, 2931, 3964, 6214, 7016, 1191, 3255, 5596, 9599, 6182]
[1191, 1557, 2931, 3964, 6214, 7016, 3255, 5596, 9599, 6182]
[1191, 1557, 2931, 3255, 3964, 6214, 7016, 5596, 9599, 6182]
[1191, 1557, 2931, 3255, 3964, 5596, 6214, 7016, 9599, 6182]
[1191, 1557, 2931, 3255, 3964, 5596, 6214, 7016, 9599, 6182]
[1191, 1557, 2931, 3255, 3964, 5596, 6182, 6214, 7016, 9599]
-------------插入排序之後----------------
[1191, 1557, 2931, 3255, 3964, 5596, 6182, 6214, 7016, 9599]

Process finished with exit code 0

這裏寫圖片描述

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