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)
として、並び替え判断の関数を関数ポインタで
渡しているのがミソでしょうか。


次はヘッダファイルを作成してみます。



もどる