归并排序--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