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

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

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

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

Q&A

2回答

2778閲覧

c言語 バブルソートのソースコードが分かりません

yusuke001

総合スコア14

C

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

0グッド

0クリップ

投稿2015/06/10 16:10

c言語、バブルソートについて
c言語のバブルソートは分かるのですが肝心の
バブルソートを実行する処理のソースコードが分かりません
下に記載してるので、バブルソート処理を分かりやすく教えてくれませんか?
よろしくお願いします

#include<stdio.h>
#define N 10
int main(void)

int data[N], target;
int i,j,work;
int low, high, middle;
/数値入力/
printf("10個の数値を入力してください。¥n");
for ・(i=0;i<N;i++)
scanf("%d",&data[i]);
/整列/
for(i=0;i<N;-1;i++){
for(j=N-2;j>=i;j--){
if( data[j]> data[j + 1] ){
work = data[j];
・data[j]= data [j+1] ;
data[j+1]=work;


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

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

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

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

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

kutsulog

2015/06/11 01:59

こちらの私の回答で何がわからなかったのかコメントいただけませんか? https://teratail.com/questions/11055 ・これでなぜ並べ替えになるかわからない ・どこそこの処理でなぜコメントの動きになるかわからない など
guest

回答2

0

これでどうでしょうか。

lang

1#include<stdio.h> 2 3#define N 10 // (Nを10に置換) 4 5int main(void) 6{ 7 8int data[N] // N個の数字を入れる配列 9int i,j; // for文用のカウンター 10int work; // data配列の中身を一時待避させる領域(swap) 11int low, high, middle; // 未使用 12int target; // 未使用 13 14// dataの配列に1つずつ数値を入力 15for(i=0; i<N; i++){scanf("%d",&data[i]); } // {}は省略されてた わかりやすくするため追加 16 17// 0番からN-1番まで1つずつ{}の内容を実施 18for(i=0;i<N;-1;i++){ 19 // N-2番から0番まで1つずつ{}の内容を実施 20 for(j=N-2; j>=i; j--){ 21 22 // j番とj+1番を比較してj番が大きいか判定 23 if( data[j]> data[j + 1] ){ 24 work = data[j]; // workとよぶ一時領域にj番目の値を格納 25 data[j]= data [j+1] ; // j番目の配列に j+1番目の値を上書き 26 data[j+1]=work; // j+1番目の値をwork一時領域の値で上書き 27 } // if end 28 } // for j end 29} // for i end 30 31} // main end

for文 iは0から9番まで0,1,2,3,4...の順で処理します。
for文 jは8から0番まで8,7,6,7,4...の順で処理します。

if文に入る一回目 jは8です。
data[8]とdata[9]の配列の中身を比較します。

例えば、以下なら if (8 > 4)になるのでif文の中身を実行します
data[8] = 10
data[9] = 4

if文を処理することで、以下のように後ろに大きい数字をもってきます
data[8] = 4
data[9] = 10

あとはfor文によって繰り返しです
最終的に順番に並ぶバブルソートの原理はわかるということなので省略します

投稿2015/06/11 00:50

編集2015/06/11 00:58
sh1-tera

総合スコア85

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

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

0

バブルソート:隣接交換法は、隣り合うデータを比較・交換してソートします。

a.配列の[0]~[X]までの隣接データを比較・交換(内側のループ)

data[0]とdata[1]を比較し、左が大きければ、data[0]とdata[1]を交換。
data[1]とdata[2]を比較し、左が大きければ、data[1]とdata[2]を交換。

data[X-1]とdata[X]を比較し、左が大きければ、data[X-1]とdata[X]を交換。

これを行うと、一番大きな値がdata[X]に移動。(最大値の確定)

b.「a.」の処理を未確定の範囲で繰り返す(外側のループ)

data[0]~data[ M ]の範囲で「a.」を処理。→ data[ M ]:1番目に大きな値
data[0]~data[M-1]の範囲で「a.」を処理。→ data[M-1]:2番目に大きな値
data[0]~data[M-2]の範囲で「a.」を処理。→ data[M-2]:3番目に大きな値

data[0]とdata[ 1 ]の範囲で「a.」を処理。→ data[ 1 ]:M番目に大きな値
data[0]とdata[ 0 ]は同じ値なので処理終了

上記を行うと、配列の後ろから最大値が確定し、全部終わるころにはソートされています。

投稿2015/06/10 23:27

horohoro

総合スコア490

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問