コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「ストゥージソート」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m ボット: 言語間リンク 5 件をウィキデータ上の (d:Q1754846 に転記)
Cewbot (会話 | 投稿記録)
m Bot作業依頼: sourceタグをsyntaxhighlightタグに置換 (Category:非推奨のsourceタグを使用しているページ) - log
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}} -->
== 実装 ==
== 実装 ==
<source lang="Javascript">
<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

参考文献

外部リンク