これは、ソートの説明に適合します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)
これは、最も効率的ではない選択ソートを使用しますが、比較はほとんど使用しません。
これは次のように短縮できます。
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 によっていくつかのコンパレーターとして引用されており、ここで確認できます。
編集
挿入ソートもうまく機能します。
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