1、原理
插入排序 ,看到插入,大家应该都知道大概的原理了,就是将数字不断的插入到原数组的相应位置,最后使其有序的一个过程。
2、算法图解
下面是视频:
从上面的视频可以看出来:它是通过不断的比较来找到对于元素的对应位置的。
3、python代码实现
def sort_(s):
for i in range(1, len(s)):
a = s[i]
b = i
for j in reversed(range(b)):
if s[j] > a:
s[j], s[j+1] = a, s[j]
print(f"第 {i} 步:{s}")
return s
s = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
print(sort_(s))
下面是输出的结果:
第 1 步:[8, 9, 7, 6, 5, 4, 3, 2, 1, 0]
第 2 步:[7, 8, 9, 6, 5, 4, 3, 2, 1, 0]
第 3 步:[6, 7, 8, 9, 5, 4, 3, 2, 1, 0]
第 4 步:[5, 6, 7, 8, 9, 4, 3, 2, 1, 0]
第 5 步:[4, 5, 6, 7, 8, 9, 3, 2, 1, 0]
第 6 步:[3, 4, 5, 6, 7, 8, 9, 2, 1, 0]
第 7 步:[2, 3, 4, 5, 6, 7, 8, 9, 1, 0]
第 8 步:[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
第 9 步:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
4、对于上面算法的空间-时间复杂度的分析
时间复杂度:
最差是每次排序,都是当前最小的数,O(n)*O(1+2+3+4+5+......+n),所以可 以看成:O( |
最优就是,输入的就是排好顺序的数,那么时间复杂度是:O(n) |
空间复杂度:O(1)