顺序插入排序与等差数列求和

cooolr 于 2021-02-23 发布
List = [7,5,4,6,1,3,2]
n = 1

for index in range(len(List)):
    for _index in range(index):
        n += 1
        if List[_index] > List[index]:
            pop = List.pop(index)
            List[_index:_index] = [pop]
            print(List)
            break
print(n)

在最佳情况下,每一个弹出值都在合适的位置,于是它只需和一个条目做比较。因此,将排入排序应用到一个有n个条目的列表需要n-1次比较。

在最差情况下,每一个弹出值都必须与列表中排在它前面的所有条目进行比较,才能找到合适的位置。因此,在给有n个条目的列表进行排序时,需要进行的比较次数为1+2+3+…+(n-1),根据等差数列求和公式得出1/2*(n**2-n)

Sn = na1+n(n-1)d/2
   = n(a1+an)/2

解

Sn = (n-1) + (n-1)(n-2)/2
   = n-1 + 1/2*n**2 -n- 1/2*n + 1
   = 1/2*n**2 - 1/2*n
   = 1/2(n**2 - n)