1.介绍
归并排序,是创建在归并操作上的一种有效的排序算法。算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。
2.归并排序示意图:
3.代码实现
def merge_sort(list):
if len(list)<=1:
return list
middle = len(list)//2
left = merge_sort(list[:middle])
right = merge_sort(list[middle:])
#这三行代码就已经实现了分
print("--------------------------------")
print(left,right)
result = []
#新建一个临时的列表用于存放结果
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
#谁小谁扔进去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])
#当有一边全扔进去时,另一边按顺序扔进去
print(result)
return result
#为什么每有两个就会进行合并
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))