插入排序从前往后遍历数组的每一个元素,对每一位元素都将其插入到已经有序的部分数组中,所以插入排序的要点就是找出要插入元素在已经有序的部分中的位置,同时,由于插入排序采用原地排序(in-place)算法,需要将有序部分中为这个元素腾出位置,采用的办法是将有序部分中的从找到的位置之后的所有元素都向后移动一个位置来解决。
问题1)(已解决)出现了重复插入最小值的结果
def insertion_sort(collection): # for element in collection[0:]:#因为是原地排序,所以要用到数组下标去作为有序和无序的分界点,并且有序部分需要向后移位。 # 需要以当前插入元素的数组下标作为位置,所以不能使用这种遍历。 for i in range(len(collection)): variable=collection[i] #开始遍历已经有序的部分,找出应该存放的位置 for j in range(i):#因为i是区分点嘛,所以是遍历i左边的元素,但是range(5),j最大=4,所以不用i-1 if(collection[j]>variable):#那么这个下标j就是被添加元素应该存放的位置 #开始后移,把j这个下标给腾出来 for k in range(i,j,-1): collection[k]=collection[k-1] #位置已经腾出,插入 collection[j]=variable break#*******************因为没有写这句话的原因 #找到之后应该跳出上面的j循环,要不然就会从这个j开始继续向后比较,然后又交换 return collection #结果 (sort) λ python bubble_sort.py 未排序之前: [94, 37, 97, 31, 26, 79, 10, 35, 40, 6] 排序之后: [6, 6, 6, 6, 6, 6, 6, 6, 6, 10] 耗费时间: 0.0009999275207519531