1/概念及其介绍
插入排序(InsertionSort),一般也被称为直接插入排序。
从index=1这个元素开始遍历,也就是从第二个元素开始,一直到最后一个元素,依次把元素放在恰当的位置。
分为2步:
<1>先给某个元素找到合适的位置
<2>把元素插入到这个位置
对于少量元素的排序,它是一个有效的算法。
插入排序是一种最简单的排序方法,它的基本思想是将一个元素插入到`已经排好序`的列表中,
这样一个新的、记录数增加1的有序列表就诞生了。
在实现过程使用双层循环:
外层循环从第二个元素开始遍历
内层循环对当前元素前面有序表进行待插入位置查找,并进行移动,
(及找到最合适的位置,然后把元素插入进去)
2/适用说明
插入排序的平均时间复杂度也是O(n^2),空间复杂度为常数阶O(1),
(不需要另外开辟空间来存储数据,所示0(1))
具体时间复杂度和数组的有序性也是有关联的。
插入排序中,当待排序数组是有序时,是最优的情况,只需当前数跟前一个数比较一下就可以了,这时一共需要比较N-1次,时间复杂度为O(N)。
最坏的情况是待排序数组是逆序的,此时需要比较次数最多,最坏的情况是O(n^2)。
3/过程图示
假设前面n-1(其中 n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,
然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。
按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。
从小到大的插入排序整个过程如图示:
4/插入排序代码
import random
temp_list = []
for i in range(20):
temp_list.append( random.randint(1,20) )
def insert_sort(temp_list):
n = len(temp_list)
if n <= 1:
return temp_list
for i in range(1,n):
current_value = temp_list[i]
pre_index = i - 1
while pre_index >= 0 and temp_list[pre_index] > current_value:
temp_list[pre_index+1] = temp_list[pre_index]
pre_index -= 1
temp_list[pre_index+1] = current_value
return temp_list
if __name__ == "__main__":
result = insert_sort(temp_list)
print(result)