C言語 バブルソート



C言語のお勉強のお題としてソートを書いて見ます。


■mysort.c


#include 

/* データを入れ替える */
void swap(int *data,int a, int b) {
    int tmp = data[a];
    data[a] = data[b];
    data[b] = tmp;
}

int main(int argc, char* argv[]) {
    
    /* ソートする配列 */
    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 (data[i + 1] < 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;
}



配列の大きさを
sizeof(data)/sizeof(data[0])
としているところが新しく学んだポイントでしょうか。


あわせてmakefileもかいてみました。

■Makefile


COPT=-O

mysort : mysort.o
    gcc -o mysort mysort.o

mysort.o : mysort.c
    gcc $(COPT) -c mysort.c

clean :
    @-rm *.o


※gccの前はタブ


次はこれを元に、-rというオプションで降順に
並び替えるように変更してみます。



もどる