definsertion_sort(a):
n =len(a)for i inrange(1,n):
j = i -1while j >=0and a[i]< a[j]:
a[j], a[i]= a[i], a[j]
i -=1
j -=1return a
这种思路存在的问题就是,会遇到大量的交换操作。
因此在改进的时候我们尝试把交换操作改为挪动操作,这样可以对性能进行提升。
改进后的代码实现
definsertion_sort_updated(a):
n =len(a)# 假设 i 之前代表的区间是有序的, 之后是无序的for i inrange(1,n):
j = i -1
v = a[i]while j >=0and v < a[j]:
a[j+1]= a[j]
j -=1
a[j+1]= v
return a
普通的插入排序思路:将序列分为两个部分,第一部分是有序数列,第二部分是无序数列按顺序每次从无序数列里面取一个数字,插入到有序数列的合适位置,这一步的具体实现为:如果当前待插数字不断地与它前一个数字进行比较,如果比当前待插数字大,那么待插数字就和这个已经有序的数字交换位置;直到在有序数列中找到合适的位置为止。即,通过相邻元素的不断交换来达到无序数字插入到合适位置的目的普通思路的代码实现:def insertion_sort(a): n = len(a) for i in