pythonでの集計ソート
2898 ワード
https://www.bilibili.com/video/av17888875?from=search&seid=17019827770934522690
集計ソートアルゴリズムの時間的複雑度:O(Nlogn)
集計ソートアルゴリズムを用いてN規模のリストをソートするのに要する時間をT(N)とすると、集計ソートアルゴリズムを用いた詳細は、長さNのリストを長さN/2のリスト2つに分割し、それぞれ集計ソートアルゴリズムを用いてソートすると消費時間2*T(N/2)となり、さらに2つの並べ替えられた秩序化されたサブシーケンスを並べ替え(merge)、並べ替えの過程は絶えず比較して消去し、2つの長さN/2のリストを並べ替えるのに要する時間の複雑さは2つのサブリストの要素の個数NがO(N)であることに等しく、最終的に並べ替えられたリストを得る.
計算の複雑さの繰返し式は次のとおりです.
T(N)=2*T(N/2)+O(N)
T(N)=O(Nlog(N))
集計ソートアルゴリズムの時間的複雑度:O(Nlogn)
集計ソートアルゴリズムを用いてN規模のリストをソートするのに要する時間をT(N)とすると、集計ソートアルゴリズムを用いた詳細は、長さNのリストを長さN/2のリスト2つに分割し、それぞれ集計ソートアルゴリズムを用いてソートすると消費時間2*T(N/2)となり、さらに2つの並べ替えられた秩序化されたサブシーケンスを並べ替え(merge)、並べ替えの過程は絶えず比較して消去し、2つの長さN/2のリストを並べ替えるのに要する時間の複雑さは2つのサブリストの要素の個数NがO(N)であることに等しく、最終的に並べ替えられたリストを得る.
計算の複雑さの繰返し式は次のとおりです.
T(N)=2*T(N/2)+O(N)
T(N)=O(Nlog(N))
'''
python ( )
'''
def merge_sort(array):
# print(array)
n=len(array)
if n==1:
return array
mid=n//2
left=merge_sort(array[:mid])
right=merge_sort(array[mid:])
return merge(left,right)
def merge(left,right):
out=[]
while left and right:
p1=left[0]
p2=right[0]
if p1<=p2:
out.append(left.pop(0))
else:
out.append(right.pop(0))
if left:
out.extend(left)
# , left , extend out
# out.append(left)
# out+=left
if right:
out.extend(right)
return out
if __name__=='__main__':
a=[54,26,93,17,77,31,44,55,20]
assert merge_sort(a)==sorted(a)
print(merge_sort(a))
'''
https://www.bilibili.com/video/av17888875/?p=2
/ : , ,
:( merge_sort , )
merge_sort([54,26,93,17,77,31,44,55,20])
mid=4
left=merge_sort([54,26,93,17])# ,
mid=2
left=merge_sort([54,26])#
mid=1
left=merge_sort([54])
n=1
return [54]
left=[54]# ,
right=merge_sort([26])
n=1
return [26]
right=[26]#
( )
merge(left,right)=[26,54],
left=[26,54]
right=merge_sort([93,17])
mid=1
left=merge_sort([93])
n=1
return [93]
left=[93]
right=merge_sort([17])
n=1
return [17]
right=17
merge([93],[17])
[17,93]
right=[17,93]
merge(left=[26,54],right=[17,93])
[17,26,54,93]
left=[17,26,54,93]
right=merge_sort([77,31,44,55,20])
,
right=[20,31,44,55,77]
left=[17,26,54,93] right=[20,31,44,55,77]
[17, 20, 26, 31, 44, 54, 55, 77, 93]
[17, 20, 26, 31, 44, 54, 55, 77, 93]
'''