「ストゥージソート」の版間の差分
表示
削除された内容 追加された内容
m ボット: 言語間リンク 5 件をウィキデータ上の (d:Q1754846 に転記) |
|||
21行目: | 21行目: | ||
<!-- The algorithm gets its name from [[slapstick]] routines of the [[Three Stooges]], in which each stooge hits the other two.{{Citation needed|date=March 2010}} --> |
<!-- The algorithm gets its name from [[slapstick]] routines of the [[Three Stooges]], in which each stooge hits the other two.{{Citation needed|date=March 2010}} --> |
||
== 実装 == |
== 実装 == |
||
< |
<syntaxhighlight lang="Javascript"> |
||
algorithm stoogesort(array L, i = 0, j = length(L)-1) |
algorithm stoogesort(array L, i = 0, j = length(L)-1) |
||
if L[j] < L[i] then |
if L[j] < L[i] then |
||
31行目: | 31行目: | ||
stoogesort(L, i , j-t) |
stoogesort(L, i , j-t) |
||
return L |
return L |
||
</syntaxhighlight> |
|||
</source> |
|||
==参考文献== |
==参考文献== |
2020年7月5日 (日) 23:04時点における版
ストゥージソートのアニメーション | |
クラス | ソート |
---|---|
データ構造 | 配列 |
最悪計算時間 | O(nlog 3 /log 1.5) |
最悪空間計算量 | O(n) |
ストゥージソート(英: Stooge sort)は、再帰を用いたソートアルゴリズムのひとつである。
計算時間はO(nlog 3 / log 1.5 ) = O(n2.7095...)であり、これはマージソートなどの効率的なアルゴリズムよりも、それどころか非常に効率の悪い単純なソートの例としてよく挙げられるバブルソートよりも遅い。
アルゴリズムは以下の通りである。
- もし末尾の値が先頭の値より小さければ、それらを入れ替える。
- 現在処理している部分列の要素数が3以上であれば、
- リストの先頭2/3に対してストゥージソートを行う。
- リストの末尾2/3に対してストゥージソートを行う。
- リストの先頭2/3に対して再びストゥージソートを行う。
- そうでなければ終了。
実装
algorithm stoogesort(array L, i = 0, j = length(L)-1)
if L[j] < L[i] then
L[i] ↔ L[j]
if (j - i + 1) >= 3 then
t = (j - i + 1) / 3
stoogesort(L, i , j-t)
stoogesort(L, i+t, j )
stoogesort(L, i , j-t)
return L
参考文献
- Black, Paul E.. “stooge sort”. Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology. 2011年6月18日閲覧。
- Cormen, Thomas H.; Leiserson, Charles E., Rivest, Ronald L., Stein, Clifford (2001) [1990]. "Problem 7-3". Introduction to Algorithms (2nd ed.). MIT Press and McGraw-Hill. pp. 161-162. ISBN 0-262-03293-7.
外部リンク
- Everything2.com - Stooge sort
- Sorting Algorithms (including Stooge sort)
- Stooge sort - implementation and comparison