シェーカー・ソート
シェーカー・ソートを覚えた。
バブルソートの改良版。
頭から、または尻尾から一方向にソートしていくバブルソートとは違い、シェーカー・ソートでは頭と尻尾から交互にソートを行う。
#include <stdio.h> #include <stdlib.h> #define N 10 int main(void) { int data[N] = { 2, 3, 5, 8, 9, 10, 1, 4, 6, 7 }; int right, left, work, shift; int i,j; for( i=0; i<N; i++ ){ printf("%d ", data[i]); } printf("\n\n"); right = N-1; left = 0; while( right > left ){ for( i=left; i<right; i++ ){ if( data[i] > data[i+1] ){ work = data[i]; data[i] = data[i+1]; data[i+1] = work; shift = i; } } right = shift; for( i=right; i>left; i-- ){ if( data[i] < data[i-1] ){ work = data[i]; data[i] = data[i-1]; data[i-1] = work; shift = i; } } left = shift; } for( i=0; i<N; i++ ){ printf("%d ", data[i]); } printf("\n"); return 0; }