ソートマージ
ソートマージする分割統治法を用いて非常に一般的なアプリケーションです。アイデアは、ソートの再帰的分解の配列をマージして、配列をマージすることです。
最小に配列した後、および2つの順序付けられた配列をマージ、基本的な考え方は、数2列の前面を比較することで、誰が対応するポインタを取った後、バックいずれかを移動させる、第1の小かかります。次いで、比較、他の配列にコピーの最後の残りの部分までは、空の配列。
コードの実装
[パイソン]プレーンテキストビューコードをコピー
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DEFのmerge_sort(連想リストを):
lenをIF(連想リストを)<= 1:
リターン連想リスト
二部の分解
num = len(alist)/2
left = merge_sort(alist[:num])
right = merge_sort(alist[num:])
# 合并
return merge(left,right)
DEF(左、右)をマージ:
「」「の操作をマージ二つ[]は規則配列を左右[]一つの大きなソートされた配列にマージ」「」
#leftポインタと右の添字
L、R = 0,0
結果= []
しばらくL <LEN(左)及びR&LT <LEN(右):
左IF [L] <右[R&LT]:
result.append(左[L])
。Lの+ 1 =
他:
結果。追記(右[R&LT])
。R&LT + 1 =
結果+ =左[L:]
結果+ =右[R&LT:]
返信結果
連想リスト= [5、12、100、45、73、150、4、8]
sorted_alist =マージ(連想リスト)
プリント(sorted_alist)
時間計算量
O(nlogn):最適な時間の複雑
最悪の場合、時間の複雑さ:O(nlogn)
安定性: