Skip to content

Commit 41851f2

Browse files
committed
udpate merge sort
1 parent 6280829 commit 41851f2

1 file changed

Lines changed: 35 additions & 2 deletions

File tree

Sort/merge_sort.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,5 +33,38 @@ def merge_sort(array):
3333
return merge(*map(merge_sort, (array[:mid], array[mid:])))
3434

3535

36-
a = [23, 4, 5, 1, 345, 89, 7]
37-
print merge_sort(a)
36+
"===================================================================="
37+
38+
39+
def merge_sort(array):
40+
"""算法思路:
41+
42+
自底向上的写法, in replace
43+
"""
44+
half, n = 1, len(array)
45+
46+
while half < n:
47+
for start in xrange(0, n, half << 1):
48+
end = min(start + (half << 1) - 1, n - 1)
49+
i, j = start, start + half
50+
51+
while i < j and j <= end:
52+
if array[i] < array[j]:
53+
i += 1
54+
else:
55+
num = array[j]
56+
array[i + 1:j + 1] = array[i:j]
57+
array[i] = num
58+
59+
i += 1
60+
j += 1
61+
half <<= 1
62+
63+
return array
64+
65+
66+
import random
67+
68+
for _ in range(10):
69+
l = [random.randint(0, 100) for _ in xrange(random.randint(0, 100))]
70+
assert merge_sort(l) == sorted(l)

0 commit comments

Comments
 (0)