隣と比べて、逆順なら入れ替える
#includevoid swap (int *x, int *y){ int temp; temp = *x; *x = *y; *y = temp; } void bubble_sort(int array[], int array_size){ int i, j; for(i = 0; i < array_size - 1; i++){ for(j = array_size - 1; j >= i + 1; j-- ){ if(array[j] < array[j -1]) {swap(&array[j], &array[j-1]);} } } } int main(void){ int array[10] = { 2, 1, 8, 5, 4, 7, 9, 0, 6, 3}; int i; bubble_sort(array, 10); for(i = 0; i < 10; i++){ printf("%d ", array[i]); } printf("\n"); return 0; }
$ ./main
0 1 2 3 4 5 6 7 8 9
二重でforループを回している時に、"j >= i + 1" として左から順番に大きい値を配列に入れていく。