# coding:utf-8
__author__ = 'taohao'
"""
merge sort use the extra space to exchange the time
when merge two arrays, we need to use another empty array to store the completed array
so the performance of merge sort much depends on the exchanging two array
"""
def merge_sort(array, first, last, tem_array):
if first < last:
middle = (first + last) / 2
merge_sort(array, first, middle, tem_array)
merge_sort(array, middle+1, last, tem_array)
merge_array(array, tem_array, first, middle, last)
def merge_array(array, tem_array, first, middle, last):
i = first
j = middle
m = middle + 1
n = last
k = 0
while i <= j and m <= n:
if array[i] < array[m]:
tem_array[k] = array[i]
k += 1
i += 1
else:
tem_array[k] = array[m]
k += 1
m += 1
while i <= j:
tem_array[k] = array[i]
k += 1
i += 1
while m <= n:
tem_array[k] = array[m]
k += 1
m += 1
for ij in range(k):
array[first+ij] = tem_array[ij]
if __name__ == "__main__":
array = [19, 3, 6, 99, 80, 39, 4, 2, 27, 50, 6, 75, 201, 98, 28, 91]
tem_array = [0]*len(array)
merge_sort(array, 0, len(array)-1, tem_array)
print array
详情可见http://blog.csdn.net/morewindows/article/details/6678165