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 青 緑 赤 白 黄