マージソートは、任意の長さのリストをソートする最良の方法ですが、現在の方法を最適化する方法は不思議です。このソートアルゴリズムの複雑さの分析
def sortList(l):
'''
Recursively sorts an arbitrary list, l, to increasing order.
'''
#base case.
if len(l) == 0 or len(l) == 1:
return l
oldNum = l[0]
newL = sortList(l[1:]) #recursive call.
#if oldNum is the smallest number, add it to the beginning.
if oldNum <= newL[0]:
return [oldNum] + newL
#find where oldNum goes.
for n in xrange(len(newL)):
if oldNum >= newL[n]:
try:
if oldNum <= newL[n+1]:
return newL[:n+1] + [oldNum] + newL[n+1:]
#if index n+1 is non-existant, oldNum must be the largest number.
except IndexError:
return newL + [oldNum]
この機能の複雑さはどの程度ですか?私はO(n^2)を考えていたが、私は確信が持てなかった。また、この手順をさらに最適化する方法はありますか? (それを捨てて、マージソートに行く以外に!)。
私はこれを有線の_Selection Sort_と_Quick Sort_のパーティションと組み合わせて考えると、それはO(n^2)だと思います! – Arman