Skip to content

Commit 7c22653

Browse files
author
arron
committed
update:(sort): 归并和快排
1 parent 1b0a747 commit 7c22653

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

sort/Merge.py

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
#!/usr/bin/python
2+
#coding:utf-8
3+
4+
"""
5+
归并排序
6+
"""
7+
8+
def megre_sort(A, p, r):
9+
if p < r:
10+
# q = (p + r) // 2
11+
q = p + ((r - p) >> 1)
12+
megre_sort(A, p, q)
13+
megre_sort(A, q + 1, r)
14+
merge2(A, p, q, r)
15+
return A
16+
17+
def merge2(A, l, m, r):
18+
print(l, m, r)
19+
"""
20+
0, 1, 3
21+
第二个版本的merge,和下面的本稍微不同
22+
"""
23+
n1 = l
24+
n2 = m+1
25+
n = r -l + 1
26+
help = [None] * n
27+
28+
i = 0
29+
while n1 <=m and n2 <= r:
30+
if A[n1] <= A[n2]:
31+
help[i] = A[n1]
32+
n1 += 1
33+
else:
34+
help[i] = A[n2]
35+
n2 += 1
36+
i += 1
37+
38+
39+
while n1 <= m:
40+
help[i] = A[n1]
41+
i += 1
42+
n1 += 1
43+
44+
while n2 <= r:
45+
help[i] = A[n2]
46+
n2 += 1
47+
i += 1
48+
49+
for j in range(n):
50+
A[l + j] = help[j]
51+
52+
return A
53+
54+
def megre(A, p, q, r):
55+
n1 = q - p + 1
56+
n2 = r - q
57+
58+
L = [None] *n1
59+
R = [None] *n2
60+
# print A
61+
62+
for i in range(n1):
63+
L[i] = A[i + p]
64+
L.append(float("inf"))
65+
for j in range(n2):
66+
R[j] = A[q + j + 1]
67+
R.append(float("inf"))
68+
69+
i = j = 0;
70+
for k in range(p, r + 1):
71+
if L[i] < R[j]:
72+
A[k] = L[i]
73+
i += 1
74+
else:
75+
A[k] = R[j]
76+
j += 1
77+
78+
return A
79+
80+
A = [1, 90, 23, 13, 67, 53, 76, 100]
81+
print(megre_sort(A, 0, len(A)-1))

0 commit comments

Comments
 (0)