public class Koukan01 { public static void main( String[] args ) { int[] data = { 24, 17, 16, 18 }; // 0, 1, 2, 3 //2まで、1まで、0まで、と繰り返す(i) for( int i=2; i>=0; i-- ){ for( int j=0; i>=j; j++ ) { if( data[j] > data[j+1] ){ int tmp = data[j]; //この3行で値の交換 data[j] = data[j+1]; data[j+1] = tmp; } } } for (int i = 0; data.length>i; i++) { System.out.print(data[i] + " "); } System.out.println(); }//mainの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Koukan01.java $ java Koukan01 16 17 18 24 $
public class Koukan02 { public static void main( String[] args ) { int[] data = { 24, 17, 16, 18, 30, 22 }; // 0, 1, 2, 3, 4, 5 int n = data.length; //データ数は6 -> 4から0まで for( int i=n-2; i>=0; i-- ){ for( int j=0; i>=j; j++ ) { if( data[j] > data[j+1] ){ int tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp; } } } for (int i = 0; data.length>i; i++) { System.out.print(data[i] + " "); } System.out.println(); }//mainの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Koukan02.java $ java Koukan02 16 17 18 22 24 30 $
public class Koukan03 { public static void main( String[] args ) { int[] data = { 24, 17, 16, 18, 30, 22 }; // 0, 1, 2, 3, 4, 5 int n = data.length; //データ数は6 -> 4から0まで for( int i=n-2; i>=0; i-- ){ for( int j=0; i>=j; j++ ) { print(data,i,j); if( data[j] > data[j+1] ){ int tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp; } print(data,i,j); } } }//mainの終わり static void print(int[] data, int i, int j){ for (int x = 0; data.length>x; x++) { System.out.printf("%4d",data[x]); } System.out.printf(": i=%2d j=%2d",i,j ); System.out.println(); return; }//printの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Koukan03.java $ java Koukan03 24 17 16 18 30 22: i= 4 j= 0 17 24 16 18 30 22: i= 4 j= 0 17 24 16 18 30 22: i= 4 j= 1 17 16 24 18 30 22: i= 4 j= 1 17 16 24 18 30 22: i= 4 j= 2 17 16 18 24 30 22: i= 4 j= 2 17 16 18 24 30 22: i= 4 j= 3 17 16 18 24 30 22: i= 4 j= 3 17 16 18 24 30 22: i= 4 j= 4 17 16 18 24 22 30: i= 4 j= 4 17 16 18 24 22 30: i= 3 j= 0 16 17 18 24 22 30: i= 3 j= 0 16 17 18 24 22 30: i= 3 j= 1 16 17 18 24 22 30: i= 3 j= 1 16 17 18 24 22 30: i= 3 j= 2 16 17 18 24 22 30: i= 3 j= 2 16 17 18 24 22 30: i= 3 j= 3 16 17 18 22 24 30: i= 3 j= 3 16 17 18 22 24 30: i= 2 j= 0 16 17 18 22 24 30: i= 2 j= 0 16 17 18 22 24 30: i= 2 j= 1 16 17 18 22 24 30: i= 2 j= 1 16 17 18 22 24 30: i= 2 j= 2 16 17 18 22 24 30: i= 2 j= 2 16 17 18 22 24 30: i= 1 j= 0 16 17 18 22 24 30: i= 1 j= 0 16 17 18 22 24 30: i= 1 j= 1 16 17 18 22 24 30: i= 1 j= 1 16 17 18 22 24 30: i= 0 j= 0 16 17 18 22 24 30: i= 0 j= 0 $
降順は大きい順です。Koukan03.javaは小さい順になっているので昇順といいます。
Koukan03.java から?の部分を変更するだけです。考えましょう。エディタで「別名で保存」を選び、Koukan04.java という名前で保存すればいいでしょう。
public class Koukan04 { public static void main( String[] args ) { int[] data = { 24, 17, 16, 18, 30, 22 }; // 0, 1, 2, 3, 4, 5 int n = data.length; //データ数は6 -> 4から0まで for( int i=n-2; i>=0; i-- ){ for( int j=0; i>=j; j++ ) { print(data,i,j); if( data[j] ? data[j+1] ){ int tmp = data[j]; data[j] = data[j+1]; data[j+1] = tmp; } print(data,i,j); } } }//mainの終わり static void print(int[] data, int i, int j){ for (int x = 0; data.length>x; x++) { System.out.printf("%4d",data[x]); } System.out.printf(": i=%2d j=%2d",i,j ); System.out.println(); return; }//printの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Koukan04.java $ java Koukan04 24 17 16 18 30 22 i=4 j=0 24 17 16 18 30 22 i=4 j=1 24 17 16 18 30 22 i=4 j=2 24 17 18 16 30 22 i=4 j=3 24 17 18 30 16 22 i=4 j=4 24 17 18 30 22 16 i=3 j=0 24 17 18 30 22 16 i=3 j=1 24 18 17 30 22 16 i=3 j=2 24 18 30 17 22 16 i=3 j=3 24 18 30 22 17 16 i=2 j=0 24 18 30 22 17 16 i=2 j=1 24 30 18 22 17 16 i=2 j=2 24 30 22 18 17 16 i=1 j=0 30 24 22 18 17 16 i=1 j=1 30 24 22 18 17 16 i=0 j=0
Koukan03.java から次の部分を変更するだけです。intの配列 data が、Stringの配列 word になるので、色々変化しますが、特にwordと一緒にimiも整列する必要があるということで、作業が多くなっています。? の部分は穴埋め問題です。考えましょう。
public class Koukan05 { public static void main( String[] args ) { String[] word = { "red", "green", "yellow", "white", "blue" }; String[] imi = { "赤", "緑", "黄", "白", "青" }; int n = word.length; //データ数は5 -> 3から0まで for( int i=n-2; i>=0; i-- ){ for( int j=0; i>=j; j++ ) { print(word,i,j); if( word[j].compareTo(word[j+1]) > 0 ){ String tmp = word[j]; word[j] = word[j+1]; word[j+1] = tmp; tmp = imi[?]; imi[?] = imi[?]; imi[?] = tmp; } print(word,i,j); } } for (int x = 0; imi.length>x; x++) { System.out.printf("%-7s",imi[x]); } System.out.println(); }//mainの終わり static void print(String[] word, int i, int j){ for (int x = 0; word.length>x; x++) { System.out.printf("%-7s",word[x]); } System.out.printf(": i=%2d j=%2d",i,j ); System.out.println(); return; }//printの終わり }//classの終わり
コンパイルと実行は次のようにします。
$ javac Koukan05.java $ java Koukan05 red green yellow white blue : i= 3 j= 0 green red yellow white blue : i= 3 j= 0 green red yellow white blue : i= 3 j= 1 green red yellow white blue : i= 3 j= 1 green red yellow white blue : i= 3 j= 2 green red white yellow blue : i= 3 j= 2 green red white yellow blue : i= 3 j= 3 green red white blue yellow : i= 3 j= 3 green red white blue yellow : i= 2 j= 0 green red white blue yellow : i= 2 j= 0 green red white blue yellow : i= 2 j= 1 green red white blue yellow : i= 2 j= 1 green red white blue yellow : i= 2 j= 2 green red blue white yellow : i= 2 j= 2 green red blue white yellow : i= 1 j= 0 green red blue white yellow : i= 1 j= 0 green red blue white yellow : i= 1 j= 1 green blue red white yellow : i= 1 j= 1 green blue red white yellow : i= 0 j= 0 blue green red white yellow : i= 0 j= 0 青 緑 赤 白 黄