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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

2355閲覧

バブルソートについて

sizuku55

総合スコア7

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/01/05 07:30

編集2018/01/05 08:01

バブルソートについて理解ができなくて困っています。

問題
整数を 10 回入力し、小さい順に並べ替えて表示するプログラムを作成してください。

コード

// bufferedReaderを初期化 BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in)); // String 型の変数 s を宣言 String s = ""; // 入力回数(1~10) int count = 1; int x = 0; // int 型の配列を表す変数 values を宣言し、10個の要素を代入 int values[] = new int[10]; // 再入力できるようwhile文を用いてcountが10以下の間、ループする while(count <= 10) { try { // ガイドを表示 System.out.println(count + "個目の数値を入力してください"); // 1行分の文字列を読み込む s = buffer.readLine(); // 入力された文字列を int 型に変換し、変数 values に代入する values[count - 1] = Integer.parseInt(s); // 回数を加算(1~10) count++; } catch (NumberFormatException e) { // エラーメッセージを表示 System.out.println("数値のみ入力できます、再度数値を入力してください"); // 再入力 continue; } catch (IOException e) { // エラーメッセージを表示 System.out.println("予期せぬエラーが発生しました、再度数値を入力してください"); // 再入力 continue; } } // バブルソートを使い、昇順に10個の数値を並べ替える for(int j = 0; j < (10 - 1); j++) { for(int i = 0; i < (10 - 1) -j; i++) { if(values[i] > values[(i + 1)]) { x = values[i]; values[i] = values[(i+1)]; values[(i + 1)] = x; } } } // バブルソートで昇順に並べ替えた数値を全て表示 for(int i = 0; i < 10; i++) { // 入力され昇順に並び替えられた数値を表示 System.out.println((i + 1) + "個目の値:" + values[i]); } } }

この問題のラストのバブルソートを使い~~の部分なのですが、どうしてこのようなコードになるのかが、調べても理解できず困っています。解説をお願いしたいです。。。
なぜ(10-1)なのか、配列が0からだから?

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

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

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

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

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

guest

回答3

0

ベストアンサー

https://www.youtube.com/watch?v=pk6UdtGKgSQ
https://www.google.co.jp/search?q=%E3%83%90%E3%83%96%E3%83%AB%E3%82%BD%E3%83%BC%E3%83%88&source=lnms&tbm=vid&sa=X&ved=0ahUKEwiE_YbOp8DYAhWLyLwKHfCKDScQ_AUICigB&biw=1920&bih=989
こういった動画があるので見てみるといいかも

隣どおしを比べていって配列の端っこに追いやっていくって言う感じですね。

動画のほうで感覚がわかれば

// バブルソートを使い、昇順に10個の数値を並べ替える for(int j = 0; j < (10 - 1); j++) { for(int i = 0; i < (10 - 1) -j; i++) {

jは確定した個数、iは追いやっていく回数に関する変数っていうのがわかるかと思います。
(文章では説明しづらいので動画で感覚をつかむのがいいかと)

投稿2018/01/05 07:44

rururu3

総合スコア5545

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

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

0

10個の箱が左から右に並んでいて、中に数字がマジックで書かれたスイカがはいっている。
数字の順がバラバラなので、左から小さい順に並べたいけど、体力がないので隣まで運ぶのがやっと。
そこで、左から順に箱を覗いて、右側の箱より大きい数字のスイカだったら、交換することにした。
こうやって、9個目の箱まで見ていくと、10個目の箱には一番大きな数字のスイカが入る。
でも、ほかの箱はまだばらばらだ。
しかたない、もう一度最初の箱から同じことをやるか。
でも10個の箱はそろっているから、今度は8個目の箱まで見ればいいや。
・・・
こうして作業を繰り返すと、あら不思議。数字が並び終わった。
お疲れ、俺って意外と体力あるじゃん、えへへ、、というロジックです。

投稿2018/01/05 08:25

編集2018/01/05 08:28
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

バブルソートでは、まず、値の列の先頭から隣り合う値を順番に比較して、大小が逆なら順番を入れ替えるという操作を最後まで繰り返します。このとき、値が10個あれば比較する回数は(10-1)回となります。
この操作で、最後に来るべき値が列の最後に移動しますので、次の操作では最後の比較を省略できます。
また、先頭に来るべき値が列の最後にあった場合、1個前に移動しますので、この操作を(10-1)回繰り返せば、全ての値が順番に並ぶわけです。

投稿2018/01/05 09:07

編集2018/01/05 10:50
hichon

総合スコア5737

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問