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

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

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

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

Q&A

解決済

3回答

1620閲覧

バブルソートを実装したいのですが、結果が出なくて困っています。

omg_program

総合スコア15

C

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

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

0グッド

0クリップ

投稿2018/09/06 01:36

前提・実現したいこと

バブルソートを実装したいのですが、

発生している問題・エラーメッセージ

プリントに配列が表示されない。

該当のソースコード

C言語

1バブルソートの

#include <stdio.h>
int main(void){
int tranp [] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
int io = 0;

for(int i=12;i==0;i--){ if(tranp[io]>tranp[io+1]){ int change = tranp[io]; tranp[io] = tranp[io+1]; tranp[io+1] = change; printf("%d",tranp[io]); io++; } printf("%d",tranp[io]); }

}

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

C

1for(int i=12;i==0;i--)

iが12で始まっているのに、継続条件が「iが0の時」なので、一度もループに入ることなく終了します。

投稿2018/09/06 01:54

swordone

総合スコア20649

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

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

omg_program

2018/09/06 04:11

回答ありがとうございます。 終了条件と勘違いしてました。 とても助かりました。
guest

0

ベストアンサー

表示がされないのはforのループ条件が間違っているからです。

c

1for(int i=12;i==0;i--){

i==0の箇所がループ条件です。
つまりiが0の間ループするということです。
iは12から始まっているので当然ループせずに抜けます。

というのが質問の答えですが、そもそもバブルソートの処理が間違っています。
バブルソートは1重のループでは実現できません。
書き換えたのが以下になります。

c

1#include <stdio.h> 2int main(void){ 3 int tranp [] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; 4 5 for(int i = 12; i >= 0; i--){ 6 for(int j = 0; j < i; j++){ 7 if(tranp[j] > tranp[j + 1]){ 8 int change = tranp[j]; 9 tranp[j] = tranp[j + 1]; 10 tranp[j + 1] = change; 11 } 12 } 13 } 14 for(int i = 0; i < 13; i++){ 15 printf("%d,",tranp[i]); 16 } 17} 18

ちなみにtranp配列は最初からソートされているので、ソートを確かめるのであればランダムに並べ替えましょう。
あと余談ですが、トランプのスペルはtrumpです。
まあ和製英語のようなので何でもいいですが。

投稿2018/09/06 01:58

編集2018/09/06 04:40
ttyp03

総合スコア16996

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

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

swordone

2018/09/06 02:03

どうでもいい情報: trump自体は和製英語ではなく、「切り札」という意味の英語。 ゲームで使われていたtrumpという言葉が、日本でカードの束そのものを指すようになったという話。
ttyp03

2018/09/06 02:05

あら、そうなんですか。 私がたまたま見たページが間違っていたようですね。 どうでもいい情報、ありがとうございましたw
omg_program

2018/09/06 04:05

丁寧な解説ありがとうございます。 大変参考になります。 一段ループでi番目に大きい数字の、二段目のループで最大値を探して右に寄せる。 合わせることによって i番目に大きい数字を右によせるという理解で正しいでしょうか
ttyp03

2018/09/06 04:45

そういう理解で正しいです。 が、すみません、最初に回答したコードに誤りがありましたので訂正しました。 それに沿って説明すると、 1段目のループは、2段目のループの終わり位置を表しています。 2段目のループは、一番左端とその右隣といった具合に比較し、左側が大きければ入れ替えます。 というのを1段目のループの回数分行います。
omg_program

2018/09/06 04:48

ありがとうございます。 理解が深まりました。 また質問に答えて頂けると幸いです。
guest

0

バブルソートは2重for文で書けます。
ただ、質問欄にある配列{1,2,3,4,5,6,7,8,9,10,11,12,13};は最初からソートされているので
私が書いたソースはソートされているのがわかるようにあえて数字をばらばらにしました。

「バブルソート」と検索すると色々出てくると思います。

C

1#include <stdio.h> 2 3#define CARD_NUM 13 4 5int main(void) 6{ 7 int tranp[CARD_NUM] = {1,3,5,4,2,6,8,10,9,7,13,11,12}; 8 int i; 9 int j; 10 int tmp; 11 12 for(i = 0; i < CARD_NUM - 1; i++){ 13 for(j = CARD_NUM - 1; j > i; j--){ 14 if(tranp[j - 1] > tranp[j]){ 15 tmp = tranp[j - 1]; 16 tranp[j - 1] = tranp[j]; 17 tranp[j] = tmp; 18 } 19 } 20 } 21 22 for(i = 0; i < CARD_NUM ; i++){ 23 printf("%d ",tranp[i]); 24 } 25 26 return 0; 27}

投稿2018/09/06 01:55

編集2018/09/06 01:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

omg_program

2018/09/06 04:14

回答ありがとうございます。 試行錯誤しているうちに、混乱してしまいました。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問