シェーカーソート

本日のアルゴリズムはシェーカーソートになります。
シェーカーソートはバブルソートを効率が良くなるように改良したものです。
バブルソートではスキャンする方向が一方向でしたが、シェーカーソートでは
交互に二方向から行っていきます。
このようにバブルソートを改良したシェーカーソートですが、最悪時のソートスピードは
バブルソートと同じ速度になります。

void shaker_sort( int *array )
{
    int i;
    int left;
    int right;
    int shift;
    int w;

    left = 0;
    right = 10 -1 /* 配列の要素数マイナス1 */

    while( left < right ) {
        for( i = left; i < right; i++ ) {
            if( array[i] > array[i+1] ) {
                w = array[i];
                array[i] = array[i+1];
                array[i+1] = w;
                shift = i;
            }
        }
        right = shift;
        for( i = right; i > left; i-- ) {
            if( array[i] < array[i-1] ) {
               w = array[i];
                array[i] = array[i+1];
                array[i+1] = w;
                shift = i;
            }
        }
        left = shift;
    }
}

にほんブログ村 IT技術ブログへ
にほんブログ村
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村