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