1.介紹
歸并排序,是創(chuàng)建在歸并操作上的一種有效的排序算法。算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用,且各層分治遞歸可以同時(shí)進(jìn)行。歸并排序思路簡(jiǎn)單,速度僅次于快速排序,為穩(wěn)定排序算法,一般用于對(duì)總體無序,但是各子項(xiàng)相對(duì)有序的數(shù)列。
2.歸并排序示意圖:

歸并排序
3.代碼實(shí)現(xiàn)
def merge_sort(list):
if len(list)<=1:
return list
middle = len(list)//2
left = merge_sort(list[:middle])
right = merge_sort(list[middle:])
#這三行代碼就已經(jīng)實(shí)現(xiàn)了分
print("--------------------------------")
print(left,right)
result = []
#新建一個(gè)臨時(shí)的列表用于存放結(jié)果
i = j = 0
while (i<len(left) and j<len(right)):
if (left[i] < right[j]):
result.append(left[i])
i = i +1
else:
result.append(right[j])
j = j + 1
#誰小誰扔進(jìn)去result里
else:
if(i==len(left)):
for k in range(j,len(right)):
result.append(right[k])
else:
for k in range(i,len(left)):
result.append(left[k])
#當(dāng)有一邊全扔進(jìn)去時(shí),另一邊按順序扔進(jìn)去
print(result)
return result
#為什么每有兩個(gè)就會(huì)進(jìn)行合并
a = [2, 6, 10, 3, 5, 8, 4,11,12,13,14,15,16,17,18,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37]
print(merge_sort(a))