質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

3回答

584閲覧

c言語のバブルソートについて

yu3sukei22

総合スコア8

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2021/07/16 16:37

バブルソートのプログラミングについて、ただ最初と最後の列を出すだけでなく、間の変換を一個するたびに数列を出力するようにしたいです。

c

1#include<stdio.h> 2 3/* 値を入れ替える関数 */ 4void swap (int *x, int *y) { 5 int temp; // 値を一時保存する変数 6 7 temp = *x; 8 *x = *y; 9 *y = temp; 10} 11 12 13int main (void) { 14 int array[10] = { 2, 1, 8, 5, 4, 7, 9, 0, 6, 3 }; 15 int i,j; 16 int array_size=10; 17 printf("Before sort: "); 18 for (i = 0; i < 10; i++) { printf("%d ", array[i]); } 19 printf("\n"); 20 for (i = 0; i < array_size - 1; i++){ //bubble sort 21 for (j = array_size - 1; j >= i + 1; j--){ 22 if (array[j] < array[j-1]) { swap(&array[j], &array[j-1]); } 23 } 24 for (i = 0; i < 10; i++) { printf("%d ", array[i]); } //ここで一回ごとに出力したい 25 printf("\n"); 26 } 27 28 29 printf("After sort: "); 30 for (i = 0; i < 10; i++) { printf("%d ", array[i]); } 31 printf("\n"); 32 33 return 0; 34}

出力結果は
Before sort: 2 1 8 5 4 7 9 0 6 3
0 2 1 8 5 4 7 9 3 6
After sort: 0 2 1 8 5 4 7 9 3 6
と途中で終わっている結果になっています。どうしてですか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

C

1void print_array(int array[], int n) { 2 for (int i = 0; i < n; i++) { 3 printf("%d ", array[i]); 4 } 5 printf("\n"); 6}

を用意し、プリントしたいところで呼べばいいと思うの。

C

1int main (void) { 2 int array[10] = { 2, 1, 8, 5, 4, 7, 9, 0, 6, 3 }; 3 int i,j; 4 int array_size=10; 5 printf("Before sort: "); 6 print_array(array, 10); // ここでプリント 7 for (i = 0; i < array_size - 1; i++){ //bubble sort 8 for (j = array_size - 1; j >= i + 1; j--){ 9 if (array[j] < array[j-1]) { swap(&array[j], &array[j-1]); } 10 } 11 print_array(array, 10); // ここでプリント 12 } 13 14 15 printf("After sort: "); 16 print_array(array, 10); // ここでプリント 17 18 return 0; 19}

投稿2021/07/17 02:20

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

if (array[j] < array[j-1]) { swap(&array[j], &array[j-1]); }

これちがいますよ
なんでインデックスがjだけなんでしょうかw

投稿2021/07/16 22:50

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2021/07/16 23:04

題意と異なる回答。低評価。
Zuishin

2021/07/16 23:27 編集

j だけだと何か問題ありますか? 隣の要素同士を比較して交換するなら、インデックスに使う変数は一つで事足りると思いますが。
y_waiwai

2021/07/17 00:59

if (array[j] < array[i]) { swap(&array[j], &array[i]); } ああ、バブルソートってお題でしたね
episteme

2021/07/17 02:52

お題はバブルソートじゃなくて「途中経過を出力したい」です。
guest

0

外側の for で使っている変数を、内側の for でも使っているからでしょう。

投稿2021/07/16 18:13

jimbe

総合スコア12744

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問