shakerSort関数

本ページには広告が含まれています。

引数に指定された配列をシェーカーソートで並び替えます。

構文
shakerSort( array )
引数
array 必須
ソートする数値を格納した配列。参照引数。
戻り値

プログラム

UWSC

解説

    2-3行目
    UWSC
    4,22行目
    UWSC
    無限ループ。
    5行目
    UWSC
    lastSwapIndexにtopIndexを代入。
    6,11行目
    UWSC
    topIndexがbottomIndexになるまで繰り返す。
    7-10行目
    UWSC
    配列のn番目がn+1番目より大きかったら、その2つを入れ替える。lastIndexにnを代入する。
    12行目
    UWSC
    bottomIndexにlastSwapIndexを代入。
    13行目
    UWSC
    topIndexとbottomIndexが等しかったらループを抜ける。
    14,19行目
    UWSC
    bottomIndexからtopIndex+1まで繰り返す。
    15-18行目
    UWSC
    配列のn番目がn-1番目より小さかったら、その2つを入れ替える。lastIndexにnを代入する。
    20行目
    UWSC
    bottomIndexにlastSwapIndexを代入。
    21行目
    UWSC
    topIndexとbottomIndexが等しかったらループを抜ける。

使い方

UWSC
結果
プレーンテキスト

シェーカーソート

シェーカーソートは、ソートのアルゴリズムの一つです。バブルソートを改良したもの。双方向バブルソート、改良交換法とも言われます。

バブルソートでは、配列の要素を1つずつ比較していくため、逆に整列された配列の場合には非常に遅いという問題があります。シェーカーソートは、配列を前から順番に比較するだけでなく、後ろからも比較することで、配列の整列をより効率的に行います。

アルゴリズム

バブルソートで1回スキャンを行うと最後の要素1個がスキャン範囲中最大であることがわかり、次回のスキャン範囲を1狭めることができます。さらに、このスキャンの最後で連続してm個の要素の交換が行われていなければそのm個についてはソート済みであることが分かるので、次回のスキャン範囲をm狭めることができます。この工夫で、後半が殆ど整列済みのデータに対してバブルソートが高速に行えるようになります。

最悪計算時間 \(O(n^{2})\)
  1. 最初に、カレントポインタを配列の先頭、終端ポインタを配列の末尾に設定します。
  2. カレントポインタが終端ポインタに到達するまで、以下の処理を繰り返します。
    1. カレントポインタとその次の要素を比較し、大小関係が逆ならば、交換します。
    2. カレントポインタを1つ進めます。
    3. 終端ポインタとその前の要素を比較し、大小関係が逆ならば、交換します。
    4. 終端ポインタを1つ戻します。
  3. カレントポインタが終端ポインタに到達したら、ソートが完了です。

関連記事

QSORT関数 (スクリプト関数)
配列の中身をソートします。
bubbleSort関数 (自作関数)
引数に指定された配列を バブルソート で並び替えます。
gnomeSort関数 (自作関数)
引数に指定された配列を ノームソート で並び替えます。
insertionSort関数 (自作関数)
引数に指定された配列を 挿入ソート で並び替えます。
small関数 (自作関数)
配列の中で小さい方から数えた順位の値を求めます。
shellSort関数 (自作関数)
引数に指定された配列を シェルソート で並び替えます。
heapSort関数 (自作関数)
引数に指定された配列を ヒープソート で並び替えます。
quickSort関数 (自作関数)
引数に指定された配列を クイックソート で並び替えます。
shearSort関数 (自作関数)
引数に指定された配列を シェアソート で並び替えます。
RESIZE関数 (スクリプト関数)
配列の上限値を取得または変更します。配列の上限値を変更する場合は第二引数に値を指定します。