一 原理
分治原理:分而治之
将无序数列一分为二,二分为四,.....直到分成的子序列只含有一个元素;
元素两两排序合并,四四排序合并....全部排好后形成新的有序数列
二 关键点
- 需要两个函数来实现,其一是分,其二是和(保证有序)
- 分的函数:实现的原则是不断一分为二,不断运行分的函数,直到序列的长度只含有1个元素,此时开始合并
- 和的函数:目的实现有序;两个合并的数列本身是有序的,两个数列a,b最小的元素开始比较,小的(例如a中)放入新的(空)数列的1号位,然后a中第二小的继续和b的最小元素比较,知道有一个数列所有元素全部放入新的数列中,此时把剩下的数列添加到新数列的后面。
- 代码实现:某一元素的添加:append();某一数列的添加:extend.()
三 python 实现
data=[1,3,2,4]
def merge(a,b):
result=[]
i=0
j=0
while i<len(a) and j<len(b):
if a[i]<b[j]:
result.append(a[i])
i=i+1
else:
result.append(b[j])
j=j+1
result.extend(a[i:])
result.extend(b[j:])
return result
def sorts(data):
length=len(data)
if length<=1:
return data
mid=length//2
a=sorts(data[:mid])
b=sorts(data[mid:])
return merge(a,b)
#sort_data = sorts(data);
print(sorts(data))