C言語 バブルソート(改) |
追加してみました。
■mysort.c
#include
#include
/* データを入れ替える */
void swap(int *data,int a, int b) {
int tmp = data[a];
data[a] = data[b];
data[b] = tmp;
}
/* 昇順ソート */
int normal(int *data,int i) {
return (data[i + 1] < data[i]);
}
/* 降順ソート */
int rev(int *data,int i) {
return (data[i + 1] > data[i]);
}
int main(int argc, char* argv[]) {
int option;
option = getopt(argc, argv, "r");
int (*p_func)(int*,int) = normal;
switch( option ){
case 'r':
printf("rev!\n");
p_func = rev;
break;
default:
printf("normal!\n");
break;
}
int data[] = {10,9,8,7,};
int i,ischange;
int data_size = sizeof(data)/sizeof(data[0]);
int count = 0;
while(1) {
ischange = 0;
for (i = 0; i < data_size-1; i++) {
if (p_func(data,i)) {
swap(data,i,i+1);
ischange = 1;
count++;
}
}
if (ischange == 0) {
break;
}
}
for (i = 0; i < data_size; i++){
printf("%d\n",data[i]);
}
printf("total step:%d\n", count);
return 0;
}
int (*p_func)(int*,int)
として、並び替え判断の関数を関数ポインタで
渡しているのがミソでしょうか。
次はヘッダファイルを作成してみます。