不断的分成两部分,每次分成两部分后,将两部分合在一起。 因为不断 CALL 原函数,所以每次考虑被呼叫得两个部分已经被SORT。
import math;
def mergeSort(A, begin, end):
if(begin == end):
return;
mid = begin + math.floor((end-begin)/2);
mergeSort(A, mid+1, end);
mergeSort(A, begin, mid);
merge(A, begin, mid, end);
print(A);
def merge(A, begin, mid, end):
low = begin;
i = 0;
high = mid+1;
B = [];
while (low<= mid and high<=end):
if (A[low]<A[high]):
B.append(A[low]);
low+=1;
else:
B.append(A[high]);
high+=1;
if high>end:
for i in range(mid-low+1):
B.append(A[low]);
low+=1;
else:
for i in range(end-high+1):
B.append(A[high]);
high+=1;
for i in range(len(B)):
A[begin+i] = B[i];