在我看来,插入排序的工作原理和选择排序也有异曲同工之处很相似,选择排序是在"右边的无序区"中挑出最小(大)的数插入到"左边的有序区的末尾",插入排序则是在"左边的有序区"中找到"右边的无序区的第一个元素"应该放置的位置并插入。
算法描述
简单来说,插入排序的工作原理就是用过构造有序序列,对于未排序数据,在有序序列中从后向前扫描,找到相应的位置并插入。
- 从第一个元素开始,认为该元素已经被排序;
- 取出下一个元素cur,在已经排序的元素序列中从后向前扫描;
- 在扫描的过程中,如果扫描到的元素 > cur,将该元素往后移一位;
- 重复步骤3,直到找到小于等于cur的元素位置,将cur插入到该位置后一位。
- 重复上述步骤,直到数组有序。
时间复杂度 (平均) | 时间复杂度(最坏) | 时间复杂度(最好) | 空间复杂度 | 稳定性 |
---|---|---|---|---|
O ( n 2 ) O(n^2) O(n2) | O ( n 2 ) O(n^2) O(n2) | O ( n ) O(n) O(n) | O ( 1 ) O(1) O(1) | 稳定 |
代码描述
原理比较简单,就直接给出python的实现代码啦~~
def Insertion_sort(arr):
if len(arr) == 0 or arr is None:
return None
for i in range(1, len(arr)):
prevIndx = i - 1
cur = arr[i]
while prevIndx >= 0 and arr[prevIndx] > cur:
arr[prevIndx + 1] = arr[prevIndx]
prevIndx -= 1
arr[prevIndx + 1] = cur
return arr
if __name__ == '__main__':
arr = [54, 26, 93, 17, 77, 31, 44, 55, 20]
print(Insertion_sort(arr))