シェーカー・ソート

シェーカー・ソートを覚えた。
バブルソートの改良版。
頭から、または尻尾から一方向にソートしていくバブルソートとは違い、シェーカー・ソートでは頭と尻尾から交互にソートを行う。

#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;
}