python 归并排序(分治)
import random,time
start = time.time()
def Merge1(data,left,mid,right,):
'''
传入两部分数据,然后整合到一起
:param data: 需要排序的数据
:param left: 需要整合数据最左边
:param mid: 需要整合数据中间
:param right: 需要整合数据最右边
'''
temp = []
i = left
j = mid+1
while i<=mid and j<=right:
if data[i] < data[j]:
temp.append(data[i])
i+=1
else:
temp.append(data[j])
j+=1
while i<=mid:
temp.append(data[i])
i += 1
while j<=right:
temp.append(data[j])
j += 1
index = left
for i in range(len(temp)):
data[index]=temp[i]
index+=1
def Merge2(data, left, mid, right, ):
'''
传入两部分数据,然后整合到一起
:param data: 需要排序的数据
:param left: 需要整合数据最左边
:param mid: 需要整合数据中间
:param right: 需要整合数据最右边
'''
temp = []
i = left
j = mid + 1
while i <= mid and j <= right:
if data[i] > data[j]:
temp.append(data[i])
i += 1
else:
temp.append(data[j])
j += 1
while i <= mid:
temp.append(data[i])
i += 1
while j <= right:
temp.append(data[j])
j += 1
index = left
for i in range(len(temp)):
data[index] = temp[i]
index += 1
def MergeSort(data,left,right,reverse = False):
if left < right:
mid = (left+right)//2
MergeSort(data,left,mid,reverse)
MergeSort(data, mid+1, right,reverse)
if not reverse:
Merge1(data,left,mid,right)
else:
Merge2(data, left, mid, right)
return data
if __name__ == '__main__':
data = [random.randint(1,10000) for i in range(10000)]
ret = MergeSort(data,0,len(data)-1)
end = time.time()
print(end-start)
input()