[碩.Love Python] MergeSort(歸并排序)
def merge(s, d, i, m, n):
# merge [i, m) [m, n)
j, k = m, i
while i < m and j < n:
if s[i] < s[j]:
d[k] = s[i]
i += 1
else:
d[k] = s[j]
j += 1
k += 1
while i < m:
d[k] = s[i]
i += 1
k += 1
while j < n:
d[k] = s[j]
j += 1
k += 1
def mergeOnePass(s, d, mlen):
i, n = 0, len(s)
while i + 2 * mlen <= n:
merge(s, d, i, i + mlen, i + 2 * mlen)
i += 2 * mlen
if i + mlen < n:
merge(s, d, i, i + mlen, n)
else:
for i in xrange(i, n):
d[i] = s[i]
def mergeSort(s):
tmp = s[:]
mlen, n = 1, len(s)
while mlen < n:
mergeOnePass(s, tmp, mlen)
mlen *= 2
mergeOnePass(tmp, s, mlen)
mlen *= 2
if __name__ == '__main__':
from random import shuffle
s = range(100)
shuffle(s)
print s
mergeSort(s)
print s
點(diǎn)擊查看更多內(nèi)容
3人點(diǎn)贊
評(píng)論
評(píng)論
共同學(xué)習(xí),寫下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦