【プログラミング思考】数を並び替えるプログラムを考えよう【バブルソート】
※アフィリエイト広告を利用しています

こんにちは。

今日は、中学校2年生「データの活用」からプログラミング的な思考について考えていきます。

プログラミングってなんか難しそう。

ボン先生

大丈夫です!今日は簡単な例で考えていきますよ!

今日考えるのは、

「数の並び替え」

です。

え、そんなの簡単だよ!考える必要あるの?

ボン先生

データの活用では当たり前にやっていたと思います。でも、並び替えはとても大切なんだ。

データを活用する時には、測定などで得られたデータを、値の小さい順に並べて、最小値(min)、最大値(max)、四分位数などを求めました。

四分位数とは

データの値を小さい順に並べ、中央値を境に、前半部分と後半部分の2つに分けます。
このとき、
前半部分の中央値を「第1四分位数
データ全体の中央値を「第2四分位数
後半部分の中央値を「第3四分位数
といいます。
これらを合わせて、『四分位数』といいます。

ボン先生

これらの大前提としては、「数を小さい順に並べている」ということです。

確かにそうですね。

おれ、並べるだけなら得意だよ!

 

ボン先生

総数が少なければ人間が行うこともできますが、数が100個、1000個、10000個、…となると、できる?

うっ…。それはいやだな〜。途中で間違えそう…。

 

ボン先生

そこで使われるのがコンピュータというわけ。

でも、コンピュータって言うけど、どうやってやってもらうの?

 

ボン先生

コンピュータにやってもらうには、「こういうことをしてね」ってお願いをしなきゃいけない。

それを『プログラム』というんだ。

 

じゃあ、今日は、数を順番に並べ替えるプログラムを考えるんだね!

 

ボン先生

そういうことです!頑張っていきましょう!

数を「大きさの順に並べ替える」プログラムを考えよう

コンピュータさんお願い!って言えば、全部自動でやってくれるんじゃないの?

ボン先生

そんなうまいこといかないよ。笑
コンピュータは「簡単な命令」を「何度も繰り返す」のが得意なんだ。

だから、その「簡単な命令」を作るのが人間の役目だよ。

 

コンピュータで、2つの数を小さい順に並べ替えるには、次のような命令をします。

2つの数を小さい順に並び替える命令

【A】にはいっている数と【B】にはいっている数を比べて、
小さい方を【A】に、
大きい方を【B】におく。

A B

これだったら、

A B

これだけ?

ボン先生

そう、これだけ。
これからは、この命令を、【A:B】と呼ぶね。

では、このプログラムを使って、5つの数の並べ替えを例にとって見てみましょう。

 

5つの数の並べ替え

次のような、【A】、【B】、【C】、【D】、【E】にはいった5つの数を並べ替えて、【A】から【E】まで数が小さい順に並ぶようにします。

A B C D E

ボン先生

まずは、【E】に一番大きい数がはいるようにしよう。どうすればいいかな?

この中だと、一番大きい数は9だから…。

 

わかった!
【C:D】をやって、【D:E】をやればいい!

解答(【E】に1番大きい数をいれる)

【C:D】

A B C D E

【D:E】

A B C D E

ボン先生

正解!
【E】に1番大きい数が入ったから、次は【D】に2番目に大きい数をいれよう。

2番目に大きいのは…。うわっ。【A】にあるよ。【D】まで遠いなぁ。

 

でも、順番にやればいいよね。
【A:B】、【B:C】、【C:D】です!

 

解答(【D】に2番目に大きい数をいれる)

【A:B】

A B C D E

【B:C】

A B C D E

【C:D】

A B C D E

 

ボン先生

すばらしい!これで【D】【E】と大きい数が並びました。
残りもやってしまおう!

【D】と【E】はもう考えなくていいから、あとは簡単だぞ!
【B:C】、【A:B】だ!

 

解答(【A】から【E】まで数の大きさの順にする)

【B:C】

A B C D E

【A:B】

A B C D E

 

 

ボン先生

よくできました!
解答をまとめると、次のようになりますね。全部で7回!

 

完成
A B C D E

これを【C:D】、【D:E】、【A:B】、【B:C】、【C:D】、【B:C】、【A:B】すると

A B C D E

 

できた!気持ちいい!
命令は「となりの数と比べる」ってだけだけど、何度も繰り返すことで、順番に並べることができるんですね!

おもしろい!もう一問やりたいです!

 

ボン先生

おし!では、これはどうかな?

問題

次のような、【A】、【B】、【C】、【D】、【E】にはいった5つの数を並べ替えて、【A】から【E】まで数が大きい順に並ぶようにします。どのようなプログラムを実行すればいいですか?

A B C D E

 

え、今度は大きい順か…。

 

さっきと同じように1番目、2番目、…と順番にやっていけば大丈夫よ!

ボン先生

そうだね。

今回は大きい順だから、【B:A】のようにして、小さい数を右側にするのを忘れないようにね

 

そうだね。じゃあ、最初は、【E:D】で【E】に3をもってこよう。

A B C D E

次は2番目に小さい5を【D】にいれるから、【C:B】、【D:C】ね!

A B C D E

ボン先生

そうそう。その調子!

残りは、【C:B】、【B:A】でゴールだ!

A B C D E

 

完成(大きい順に並べる)
A B C D E

これを【E:D】、【C:B】、【D:C】、【C:B】、【B:A】すると

A B C D E

 

小さい順もできました!
数字が一つずつ決まっていくのが気持ちいい!

 

泡がポコポコ浮かんでくるみたいだね!

 

ボン先生

その通りです!今回のように、となりあう2つの数の大小を比べて数を並べ替える方法を、バブルソートと言います。泡の「bubble」とデータを並び替える「sort」を合わせてできた言葉です。

 

まとめ

Free Soap Bubble Gigantic photo and picture

今日は、「数を並べ替える」というプログラムを考えました。

今回は5つだけしか並べ替えなかったので、人間がやろうとすればめんどくさいなと感じるところがあるかもしれません。

しかし、上でも述べたように100個、1000個、10000個…とあったら人間ではミスが起きてしまいます。

簡単な命令として、誰でも理解できるようなプログラムを考えることで、人間が思うようにコンピュータを動かすことができるようになります。

今は、コンピュータを使うのが当たり前になっていますので、今回のような簡単な例でプログラミングについて学んでみても面白いと思います。

なにかしら、参考になれば幸いです。

おすすめの記事