ここから本文です

Javaの、バブルソートについてです。

nis********さん

2016/4/111:31:51

Javaの、バブルソートについてです。

class BubbleSort
{
public static void main(String[] args)
{
int[] data = {4,1,2,5,3};
for(int i=0; i<4; i++){
for(int j=0; j<4-i; j++){
if(data[j]<data[j+1]){
int temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
}
}
for(int k=0; k<data.length; k++){
System.out.print(data[k]+" ");
}
}
}

このコードですが、どうして2つも、for文があるのでしょう?
重複比較防止らしいですが、全くわかりません。
解説お願いします。

閲覧数:
55
回答数:
3

違反報告

ベストアンサーに選ばれた回答

さん

2016/4/116:08:43

if(data[j]<data[j+1]){
ここでチェックして交換しますよね。
ここのiの値ごとのjとj+1の値の変化をトレースしましょう。
i=0---j=0,1,2,3--j+1=1,2,3,4
i=1---j=0,1,2----j+1=1,2,3
i=2---j=0,1------j+1=1,2
i=3---j=0--------j+1=1


単純にみると、左右を比較してより小さい値を右に送る、という処理になります。
このことから、最初の外ループで一番右の要素に最低の値が格納されることがわかります。
最低の値が格納されたことが確定しているので、そこはもう比較しません。

次の外ループで右から二番目の要素が二番目に小さい数字になります。
あとはその繰り返しです。



質問者さんの仰っていることは前提から間違っていて、
for(int j=0; j<4-i; j++){
内ループであるこの文は
for(int j=0; j<4; j++){
重複比較防止をあえてしないならこうなります。(処理結果は同じです)
for文があることが直接的に重複比較防止になるわけではありません。

つまり
・for文は前提として2つ必要
・重複比較防止は内for文の内部で解決してる
・ループが1つしかない場合、一番右に最小値を持ってくるだけという処理になる

お分かり頂けたでしょうか。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2016/4/1 20:00:22

みなさんありがとうございました。
わからなかった。2つのforについて教えてくださったので、ベストアンサーにしました。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

境良夫さん

2016/4/112:12:21

外側のfor文を外してやってみましょう。
その結果を見れば、分かるでしょう。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

k03********さん

2016/4/111:50:27

nishidaryu416さん

for文は必要に応じて、使う。

代入してみる。たかが20回ぐらい。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる