python之归并排序
归并排序
归并排序:采用分治法,将已有序的子序列合并得到一个完全有序的序列,即先使每个子序列有序,再使子序列段有序。若将两个有序表合并成一个有序表,称为二路归并。
算法步骤
1.先将数列分成两个有序的子序列
2. 再将两个子序列合并成一个序列
python代码实现
- 将无序数列变有序
# -*- coding:utf-8 -*-
def wayMerge(a,b):
merseries = []
i = 0
j = 0
while i < len(a) and j < len(b):
if a[i] >= b[j]:
merseries.append(b[j])
j +=1
else:
merseries.append(a[i])
i += 1
merseries.extend(a[i:])
merseries.extend(b[j:])
return merseries
def mergeSort(series):
if len(series) <= 1:
return series
i = len(series)//2
l = mergeSort(series[:i])
r = mergeSort(series[i:])
return wayMerge(l,r)
data = [5, 2, 8, 4, 7, 4, 3, 9, 2, 0,1,16]
print(mergeSort(data))