归并排序--Python

def merg_sort(lst):
if(len(lst) <= 1): return lst
left = merg_sort(lst[:len(lst)/2])
right = merg_sort(lst[len(lst)/2:len(lst)])
result = []
while len(left) > 0 and len(right)> 0:
if( left[0] > right[0]):
result.append(right.pop(0))
else:
result.append(left.pop(0))

if(len(left)>0): result.extend(merg_sort(left))
else: result.extend(merg_sort(right))

return result

print merg_sort([8,7,43,2,5])


另一种:

#! /usr/bin/env python
#
coding: utf-8
 
def merge(arraylist, first, middle, last):
temp = []
i = first
j = middle + 1
while i <= middle and j <= last:
if arraylist[i] <= arraylist[j]:
temp.append(arraylist[i])
i += 1
else:
temp.append(arraylist[j])
j += 1
while i <= middle:
temp.append(arraylist[i])
i += 1
while j <= last:
temp.append(arraylist[j])
j += 1
for i in range(0, last - first + 1):
arraylist[first + i] = temp[i]
 
def merge_sort(arraylist, first, last):
if first < last:
middle = (first + last) / 2
merge_sort(arraylist, first, middle)
merge_sort(arraylist, middle + 1, last)
merge(arraylist, first, middle, last)
 
if __name__ == "__main__":
arr = [33, 31, 0, 42, 425, 21, 34, 19]
print arr
merge_sort(arr, 0, len(arr) - 1)
print arr



posted on 2012-02-26 22:47  Tony.Shao  阅读(270)  评论(0编辑  收藏  举报

导航