回答(2件)

答えは一つじゃないですよ。 昇順にソートするとして。 89, 15, 62, 21, 60 15, 89, 62, 21, 60 15, 62, 89, 21, 60 15, 62, 21, 89, 60 15, 62, 21, 60, 89 15, 21, 62, 60, 89 15, 21, 60, 62, 89 サンプルソース int main() { const int size = 5; int arr[size] = { 89, 15, 62, 21, 60 }; for (int k = 0; k < size; k++) printf(k==size-1?"%d\n":"%d, ", arr[k]); for (int j = 0; j < size; j++) { int flg = 0; for (int i = 0; i < size-j-1; i++) { if (arr[i] > arr[i+1]) { flg++; int t = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = t; for (int k = 0; k < size; k++) printf(k == size - 1 ? "%d\n" : "%d, ", arr[k]); } } if (flg == 0) break; } }

この回答はいかがでしたか? リアクションしてみよう

>バブルソート法でソートするときの1ステップごとの結果 → 昇順ソートで良いですか? ・バブルソートでも実装によって微妙にステップごとの結果は変わります。従って、コードとセットで。 ・(データ交換処理のステップ表示は不要と思ったので)バブルソート関数とデータ交換関数を分離しました。 ・バブルソート関数内に1比較処理ごとにデータ全体を表示すればそれがステップごとの結果です。 ・実行すれば、「1ステップごとの結果」が出てきますので好みに整形して下さい。 ~~~ [参考] ~~~ //main.c #include <stdio.h> void bubble(int *a, int);       //バブルソート本体関数 void swap(int*,int*);           //(ソート時の)データ入換え関数 void disp(int*,int,int,int);    //1ステップごとの結果表示 int cnt=0; int main(void){     int a[] = {89, 15, 62, 21, 60};     printf("------+--------+----------------------------\n");     printf(" step |  i  j  |         data           \n");     printf("      |        | [0] [1] [2] [3] [4] \n");     printf("------+--------+----------------------------\n");     disp(a, 5, -1, -1);     //ソート前表示     printf("------+--------+----------------------------\n");     bubble(a, 5);           //バブルソート呼出し     printf("------+--------+----------------------------\n");     disp(a, 5, -1, -1);     //ソート後表示     printf("------+--------+----------------------------\n");     return 0; } void bubble(int a[], int n){     for (int i = 0; i < n - 1; i++) {         for (int j = n - 1; j > i; j--) {             if (a[j - 1] > a[j]) {                 swap(&a[j], &a[j - 1]);             }             disp(a, n, i, j);   //1ステップごとの結果表示         }     } } void swap(int *x,int *y) {     int tmp = *x;     *x = *y;     *y = tmp; } void disp(int a[], int n, int i, int j){     printf(" %3d  | {i:%2d,j:%2d} = {", ++cnt, i, j);     for(int k=0; k<n; k++)  printf("%3d ",a[k]);     printf("}\n"); } ~~~ [結果] ~~~ >main ------+-----------+----------------------------  step |    i     j    |         data         |               |  [0]  [1]  [2]  [3]  [4]  ------+-----------+----------------------------     1  | {i:-1,j:-1} = { 89  15  62  21  60 } ------+--------+----------------------------     2  | {i: 0,j: 4} = { 89  15  62  21  60 }     3  | {i: 0,j: 3} = { 89  15  21  62  60 }     4  | {i: 0,j: 2} = { 89  15  21  62  60 }     5  | {i: 0,j: 1} = { 15  89  21  62  60 }     6  | {i: 1,j: 4} = { 15  89  21  60  62 }     7  | {i: 1,j: 3} = { 15  89  21  60  62 }     8  | {i: 1,j: 2} = { 15  21  89  60  62 }     9  | {i: 2,j: 4} = { 15  21  89  60  62 }   10  | {i: 2,j: 3} = { 15  21  60  89  62 }   11  | {i: 3,j: 4} = { 15  21  60  62  89 } ------+--------+----------------------------   12  | {i:-1,j:-1} = { 15  21  60  62  89 } ------+--------+---------------------------- ━