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

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

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

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

Q&A

解決済

2回答

1540閲覧

バブルソートについて教えてください。 Java

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2016/07/26 23:43

バブルソートについて教えてください。
jのfor文にiがないのに、何故、配列の0から順に小さい順に数値が入っていくのでしょうか?

一週目を行うことで
一番小さい数字を左にすることができるのはわかるのですが、

二週目で
二番目に小さい数字を左から二番目にすることができるのは、何故ですか?
jのfor文の中には、i=0,i=1を記憶するような記述はないと思うのですが…。

わかりにくい質問で申し訳ありません。

教えてください。よろしくお願い致します

for(i = 0; i < num.length-1; i++){ for(j = num.length-1; j > 0; j--){ if num[j-1] > num[j]; int work = num[j-1]; num[j-1] = num[j]; num[j] = work; } }

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

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

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

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

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

guest

回答2

0

ベストアンサー

正しくは下記です。
重要なのは内側のfor文の継続条件がj > iとなっているところです。

for(i = 0; i < num.length-1; i++){ for(j = num.length-1; j > i; j--){ if(num[j-1] > num[j]){ int work = num[j-1]; num[j-1] = num[j]; num[j] = work; } } }

ループの1回目で一番小さい値が先頭(インデックス0)に来ます。
したがって2回目のループでは先頭(インデックス0)の値は判定する必要がありません。
同様に、3回目のループでは先頭から2要素(インデックス0と1)の値は判定する必要がありません。

上記理由から、内側のfor文の継続条件はj > iとすることができます。

投稿2016/07/26 23:56

編集2016/07/27 00:06
wakuwaku

総合スコア386

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

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

退会済みユーザー

退会済みユーザー

2016/07/27 00:03

回答ありがとうございます。 覚えていたプログラムが間違っていたのですね。 j>iですね。確かに、配列0から小さい順に数値が入っていきますね。 スッキリしました。 ありがとうございました。
wakuwaku

2016/07/27 00:09

BA後に、正しく動作するようコードを修正しましたのでご確認ください。 if文のところが編集されています。
退会済みユーザー

退会済みユーザー

2016/07/27 00:16

ありがとうございます。 プログラム自体は、動くようなのですが、YouTubeで見たバブルソートの説明動画とやっていることが違ったので、よくわからなかった状態でした。 wakuwaku様が、修正してくださったプログラムを見ると、動画の説明と合うので、理解できました。 ありがとうございました。
guest

0

2番めの値を持ってくる時も、ループ内での動作は同様に進みますが、num[0]にはすでに最小の値が入っているので、比較はされても交換されない、というだけです。

もちろん無駄な比較にはなりますが、ソート結果は正しいです。

投稿2016/07/26 23:59

maisumakun

総合スコア145184

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

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

退会済みユーザー

退会済みユーザー

2016/07/27 00:12

回答ありがとうございます。 2番目の値を持ってくる時も、num[0]にすでに最小の値が入っているので、比較交換されないが、比較はされていて、小さい順に数値が入っていく…。なるほどです。 i = 1や2の時でも、num[0]が比較されていて、交換はされていないけれど…。でも、小さい順に数値が入っていくということですね。 無駄な比較が行われているで、何が行われているのか、わかりました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問