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