JAvaのバブルソート(Bubble sort)
2674 ワード
主な内容は他の人から抜粋したが、サンプルコードが間違っていることに気づいたため、コンテンツのコピー、コードの修正.
原理:近い数字を2つ比較して、小さいから大きい(大きいから小さい)まで交換して、このように1回が過ぎた後に、最大あるいは最小の数字は最後の1位に交換されました;
そして、最初から2つの比較交換を行い、最後から2番目に終わるまで(1回目のソートで最大(小)数を最後まで並べたことが分かったから);
次に最初から2つの比較交換を行い、最後から3番目に終わるまで(1回目のソートで最大(小)数を最後に並べ、2回目は2番目に大きい(小)数を最後から2番目に並べたことが分かったから).
順番が終わるまでループします.
例は小さいものから大きいものまで並べ替えて、
元のソート対象配列|6|2|4|1|5|9|
1回目のソート(外部ループ)
初回2両比較6>2交換(インナーサイクル)
交換前状態|6|2| 4 | 1 | 5 | 9 |
交換後ステータス|2|6| 4 | 1 | 5 | 9 |
2回目の2つの比較、6>4交換
交換前状態|2 | 6 | 4 | 1 | 5 | 9 |
交換後ステータス|2 | 4 | 6 | 1 | 5 | 9 |
3回目の2つの比較、6>1交換
交換前状態|2|4 | 6 | 1 | 5 | 9 |
交換後の状態|2|4 | 1 | 6 | 5 | 9 |
4回目の2つの比較、6>5交換
交換前状態|2|4|1 | 6 | 5 | 9 |
交換後の状態|2|4|1 | 5 | 6 | 9 |
5回目の2つの比較、6<9は交換しません
交換前状態|2|4|1|5 | 6 | 9 |
交換後の状態|2|4|1|5 | 6 | 9 |
2番目のソート(外部ループ)
初めて2つの比較2<4は交換しません
交換前状態|2|4| 1|5|6|9|(すでに知っている最大)
交換後ステータス|2|4| 1 | 5 | 6 | 9 |
2回目の2つの比較、4>1交換
交換前状態|2 | 4 | 1 | 5 | 6 | 9 | 交換後ステータス|2 | 1 | 4 | 5 | 6 | 9 |
3回目の2つの比較、4<5は交換しません
交換前状態|2|1 | 4 | 5 | 6 | 9 | 交換後の状態|2|1 | 4 | 5 | 6 | 9 |
4回目の2つの比較、5<6は交換しません
交換前状態|2|1|4 | 5 | 6 | 9 |
交換後の状態|2|1|4 | 5 | 6 | 9 |
3番目のソート(外部ループ)
初回2両比較2>1交換
交換前状態|2|1| 4 | 5 | 6 | 9 |
交換後の状態|1|2| 4 | 5 | 6 | 9 |
2回目の2つの比較、2<4は交換しません
交換前状態|1 | 2 | 4 | 5 | 6 | 9 | 交換後の状態|1 | 2 | 4 | 5 | 6 | 9 |
3回目の2つの比較、4<5は交換しません
交換前状態|1|2 | 4 | 5 | 6 | 9 | 交換後の状態|1|2 | 4 | 5 | 6 | 9 |
4番目のソート(外部サイクル)交換なし
初回2両比較1<2非交換
交換後の状態|1|2 | 4 | 5 | 6 | 9 |
初回2両比較2<4非交換
交換後の状態|1|2 | 4 | 5 | 6 | 9 |
5番目のソート(外部サイクル)交換なし
初回2両比較1<2非交換
交換後ステータス| 1 | 2 | 4 | 5 | 6 | 9 |
原:| 1 | 2 | 4 | 5 | 6 | 9 |
一:| 1 | 2 | 4 | 5 | 6 | 9 |
二:| 1 | 2 | 4 | 5 | 6 | 9 |
三:| 1 | 2 | 4 | 5 | 6 | 9 |
四:| 1 | 2 | 4 | 5 | 6 | 9 |
五:| 1 | 2 | 4 | 5 | 6 | 9 |
並べ替え完了、最終結果1 2 4 5 6 9を出力
原作者に感謝
By豆電雨
原理:近い数字を2つ比較して、小さいから大きい(大きいから小さい)まで交換して、このように1回が過ぎた後に、最大あるいは最小の数字は最後の1位に交換されました;
そして、最初から2つの比較交換を行い、最後から2番目に終わるまで(1回目のソートで最大(小)数を最後まで並べたことが分かったから);
次に最初から2つの比較交換を行い、最後から3番目に終わるまで(1回目のソートで最大(小)数を最後に並べ、2回目は2番目に大きい(小)数を最後から2番目に並べたことが分かったから).
順番が終わるまでループします.
例は小さいものから大きいものまで並べ替えて、
元のソート対象配列|6|2|4|1|5|9|
1回目のソート(外部ループ)
初回2両比較6>2交換(インナーサイクル)
交換前状態|6|2| 4 | 1 | 5 | 9 |
交換後ステータス|2|6| 4 | 1 | 5 | 9 |
2回目の2つの比較、6>4交換
交換前状態|2 | 6 | 4 | 1 | 5 | 9 |
交換後ステータス|2 | 4 | 6 | 1 | 5 | 9 |
3回目の2つの比較、6>1交換
交換前状態|2|4 | 6 | 1 | 5 | 9 |
交換後の状態|2|4 | 1 | 6 | 5 | 9 |
4回目の2つの比較、6>5交換
交換前状態|2|4|1 | 6 | 5 | 9 |
交換後の状態|2|4|1 | 5 | 6 | 9 |
5回目の2つの比較、6<9は交換しません
交換前状態|2|4|1|5 | 6 | 9 |
交換後の状態|2|4|1|5 | 6 | 9 |
2番目のソート(外部ループ)
初めて2つの比較2<4は交換しません
交換前状態|2|4| 1|5|6|9|(すでに知っている最大)
交換後ステータス|2|4| 1 | 5 | 6 | 9 |
2回目の2つの比較、4>1交換
交換前状態|2 | 4 | 1 | 5 | 6 | 9 | 交換後ステータス|2 | 1 | 4 | 5 | 6 | 9 |
3回目の2つの比較、4<5は交換しません
交換前状態|2|1 | 4 | 5 | 6 | 9 | 交換後の状態|2|1 | 4 | 5 | 6 | 9 |
4回目の2つの比較、5<6は交換しません
交換前状態|2|1|4 | 5 | 6 | 9 |
交換後の状態|2|1|4 | 5 | 6 | 9 |
3番目のソート(外部ループ)
初回2両比較2>1交換
交換前状態|2|1| 4 | 5 | 6 | 9 |
交換後の状態|1|2| 4 | 5 | 6 | 9 |
2回目の2つの比較、2<4は交換しません
交換前状態|1 | 2 | 4 | 5 | 6 | 9 | 交換後の状態|1 | 2 | 4 | 5 | 6 | 9 |
3回目の2つの比較、4<5は交換しません
交換前状態|1|2 | 4 | 5 | 6 | 9 | 交換後の状態|1|2 | 4 | 5 | 6 | 9 |
4番目のソート(外部サイクル)交換なし
初回2両比較1<2非交換
交換後の状態|1|2 | 4 | 5 | 6 | 9 |
初回2両比較2<4非交換
交換後の状態|1|2 | 4 | 5 | 6 | 9 |
5番目のソート(外部サイクル)交換なし
初回2両比較1<2非交換
交換後ステータス| 1 | 2 | 4 | 5 | 6 | 9 |
原:| 1 | 2 | 4 | 5 | 6 | 9 |
一:| 1 | 2 | 4 | 5 | 6 | 9 |
二:| 1 | 2 | 4 | 5 | 6 | 9 |
三:| 1 | 2 | 4 | 5 | 6 | 9 |
四:| 1 | 2 | 4 | 5 | 6 | 9 |
五:| 1 | 2 | 4 | 5 | 6 | 9 |
並べ替え完了、最終結果1 2 4 5 6 9を出力
1 /*
2 By starainDou
3 */
4 public class Hello {
5 public static void main(String args[]){ 6 int []num = {6,2,4,1,5,9}; 7 for(int i = 0;i<num.length - 1;i++){ 8 for(int j = 0; j<num.length-1-i;j++){ 9 if(num[j]>num[j+1]){ 10 int temp = num[j]; 11 num[j] = num[j+1]; 12 num[j+1] = temp; 13 } 14 } 15 } 16 for(int n = 0; n < num.length; n ++){ 17 System.out.print(num[n]+"\t"); 18 } 19 } 20 }
原作者に感謝
By豆電雨