これは5 elements in 7 comparisons
仕分けのあなたの説明に合う:
import random
n=5
ran=[int(n*random.random()) for i in xrange(n)]
print ran
def selection_sort(li):
l=li[:]
sl=[]
i=1
while len(l):
lowest=l[0]
for x in l:
if x<lowest:
lowest=x
sl.append(lowest)
l.remove(lowest)
print i
i+=1
return sl
print selection_sort(ran)
これが最も効率的ではありませんが、非常に少数の比較を使用しSelection Sortを使用しています。
この
はに短縮することができます。いずれの場合も
def ss(li):
l=li[:]
sl=[]
while len(l):
sl.append(l.pop(l.index(min(l))))
return sl
、このようなものを出力します。
[0, 2, 1, 1, 4]
1
2
3
4
5
[0, 1, 1, 2, 4]
Perlはこれらを再生することができますAlgorithm::Networksortと呼ばれる素敵なモジュールがあります。 Bose-NelsonアルゴリズムはKnuthによっていくつかのコンパレータで引用されており、それはhereです。
編集
insertion sortも適しています:
def InsertionSort(l):
""" sorts l in place using an insertion sort """
for j in range(1, len(l)):
key = l[j]
i = j - 1
while (i >=0) and (l[i] > key):
l[i+1] = l[i]
i = i - 1
l[i+1] = key
最悪の場合、最良の場合、平均の場合? –
あなたが探していたものではありませんが、私は興味がありましたので、私はちょうどチェックしました:120の順列の範囲(5)で、組み込みの 'ソート済み 'が各比較数を使用する順列の数は4です: 2,6:5,7:33,8:56,9:24. – Dougal
ちょうど興味深いですが、クヌスはこれと何をしなければなりませんか? – Yunchi