插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2~5。
Python 代码实现
def insertion_sort(arr): length = len(arr) if length <= 1: return for i in range(1, length): value = arr[i] j = i - 1 print('init j', j) while j >= 0 and arr[j] > value: arr[j + 1] = arr[j] j -= 1 print('替换j', j) arr[j + 1] = value print('value', value, arr) if __name__ == '__main__': # arr = [random.randint(0, 100) for _ in range(10)] arr = [56, 21, 75, 93, 39, 55, 34, 42, 81, 30] print("origin", arr) insertion_sort(arr) print("result", arr)
插入排序的时间复杂度为O(n2),空间复杂度O(1)