插入排序在最好的情况下(排序的序列正好是想要的结果时)速度很快,可以是输入项数的 n 线性时间,但在最坏的情况下(排序的序列和结果正好相反时),时间可以是 n 的平方时间。所以排列所需要的时间取决于序列的排序情况。
合并排序原理:
合并算法就是提前排序,也就是分治策略,将原序列分为很多小序列,将小序列排好序之后进行合并,然后得到最终的结果。
以下是利用合并法排序A = (5, 2, 4, 7, 1, 3, 2, 6)示意图:
Python代码实现:
def Merge(A, p, q, r):
L = A[p:q+1]
R = A[q+1:r+1]
L.append(4399)
R.append(4399)
i = 0
j = 0
for k in range(p, r+1):
if L[i] <= R[j]:
A[k] = L[i]
i += 1
else:
A[k] = R[j]
j += 1
return 0
def Merge_sort(A, p, r):
if p < r:
q = int((p + r)/2)
Merge_sort(A, p, q)
Merge_sort(A, q+1, r)
Merge(A, p, q, r)
return 0
A = [5, 2, 4, 7, 1, 3, 2, 6]
print('Before sort:', A)
Merge_sort(A, 0, len(A)-1)
print('After sort:', A)