python实现归并排序
今天用python实现了排序算法之一的归并排序,归并排序主要采用了分而治之的思想。下面是我的全部代码,采用python3实现,在网上看了很多归并排序的代码,代码不同,思想相同,我的代码也会有一些不方便的地方,大家一起学习交流
import random
import math
list_number=10 #列表元素的个数
max_number=99999 #哨兵
def merge(list,p,q,r): #合并
n1=q-p+1
n2=r-q
list1=[]
list2=[]
for i in range(n1):
list1.append(list[p+i])
for j in range(n2):
list2.append(list[q+j+1])
list1.append(max_number)
list2.append(max_number)
i=0
j=0
for k in range(p,r+1):
if(list1[i]<=list2[j]):
list[k]=list1[i]
i=i+1
else:
list[k]=list2[j]
j=j+1
def merge_sort(list,p,r): #分而治之
if(p<r):
q=math.floor((p+r)/2)
merge_sort(list,p,q)
merge_sort(list,q+1,r)
merge(list,p,q,r)
list=[]
for n in range(list_number): #生成随机数初始化列表
list.append(random.randint(1,1000))
merge_sort(list,0,len(list)-1)
for x in range(list_number):#打印看结果
print(list[x],end=' ')