插入排序
有序度:比如说2、4、3、1、5、6这组数组的有序度是11,因为它有11个有序元素对,分别是(2,4)、(2,3)、(2,5) (2,6)、(4,5)、(4,6)、(3,5)、(3,6)、(1,5)、(1,6)、(5,6)。
逆序度:满有序度 - 有序度。
对于 6、5、4、3、2、1这组数据,它的有序度是0;对于1、2、3、4、5、6这组数据来说,它的有序度是n*(n-1)/2,这种完全有序的数组的有序度叫做满有序度。
移动次数 == 逆序度:n*(n-1)/2
class InsertionSort:
def sort(self, data):
for i in range(1, len(data)):
value = data[i]
j = i - 1
while j >= 0 and data[j] > value:
data[j + 1] = data[j]
j -= 1
data[j + 1] = value
if __name__ == '__main__':
insertion_sort = InsertionSort()
data = [5, 2, 1, 4, 10, 3, 6, 7]
insertion_sort.sort(data)
assert data == [1, 2, 3, 4, 5, 6, 7, 10]
空间复杂度:O(1)
时间复杂度:
最好:O(n)
最坏:O(n2)
平均:O(n*((1+2+3+…+n)/n)) = O(n2)
稳定: