18日目 まだソートに入ったばっかり

「C言語による実用アルゴリズム入門」のソースにちょっと手を加えてみた。
ソート時間の計測を試みたが、なんか変なことをしている気がする。

/*2008/03/28 12:39:19*/

#include <stdio.h>
#include <time.h>
#include "sortfunc.h"
#define N 6

int main(void)
{
	int i;
	int d[N] = {60, 40, 30, 10, 20, 50};
	char c;
	clock_t t;

	printf("60, 40, 30, 10, 20, 50\n");
	printf("ソート法を選択してください\n\n");
	printf("a: 単純ソート\n");
	printf("b: 選択ソート\n");
	scanf("%c", &c);
		t = clock();
	switch (c){
		case 'a':
			printf("単純ソートが選択されました\n");
			ba_sort(d, 0, N-1);
			break;
		case 'b':
			printf("選択ソートが選択されました\n");
			sel_sort2(d, 0, N-1);
			break;
		default:
			printf("ソート法を選択してください\n");
			break;
	}
	ba_sort(d, 0, N-1);
	for (i=0; i<N; i++){
		printf("\t%d\n", d[i]);
	}
	printf("\n");
	printf("%.3f\n",(clock()-t)/(double)CLOCKS_PER_SEC);
	return 0;
}
/* sortfunc.h */
void ba_sort(int d[], int top, int end)
{
	int i,j,wk;

	for (i=top; i<end; i++){
		for (j=i+1; j<=end; j++){
			if (d[i] > d[j]){
				wk = d[i];
				d[i] = d[j];
				d[j] = wk;
			}
		}
	}
}

void sel_sort2(int d[], int top, int end)
{
	int i, j, tmp;
	int pos;

	for (i=top; i<end; i++) {
		pos = i;
		tmp = d[pos];
		for (j=i+1; j<end; j++){
			if (tmp > d[j]){
				pos = j;
				tmp = d[pos];
			}
		}
		d[pos] = d[i];
		d[i] = tmp;
	}
}