0
0

More than 1 year has passed since last update.

[アルゴリズム]配列の中身を小さい順に並び替えるプログラム

Posted at
 Sort.java
アウトプット用!!

#3回目は
  配列の中身を小さい順に並び変えるプログラムを作っていく!!
  今回はアルゴリズムの勉強も兼ねてあえてjava.utilパッケージにあるArrays.sort(arr)を使用しないでプログラミングをしてみました

  そこで配列の中身を小さい順に並べるにあたりバブルソート(基本交換法)でやってみました

  こちらがコードになります

class Sort {
    public static void main(String[] args) {
        int Sort[] = {8,1,7,5};

        int x;
        int i = 0;

        for(i = 0; i <= Sort.length-2; i++) { //外側のループ(最初の要素から最後の要素の一つ手前に向かって後ろに進む)
            int j = Sort.length-1; //最後の要素
            for(j = Sort.length-1; j>=i+1; j--) { //内側のループ(外側のループの要素の一つ後ろに向かって前に進む。)
                if(Sort[j-1] > Sort[j]) { 
                    x = Sort[j];
                    Sort[j] = Sort[j-1];
                    Sort[j-1] = x;  
                                        //比較して前が大きかったら交換が行われる

                }
            }
            j = j - 1;

        }
            i = i + 1;

            System.out.println(Arrays.toString(Sort));

   }

}

コンソール
[1, 5, 7, 8]
Sort.java
解説

外側ループ
  for(i = 0; i < Sort.length-2; i++)
   初期化式に0(最初の要素)から最後の要素の一つ手前に向かって後ろに進む
  そうすることで内側ループで隣と比較する時のスタート地点を配列の後ろから前へ向かってできる

int j = Sort.length-1;
    変数jに配列の最後を代入

内側のループ
    配列の最後の要素から外側ループの先頭から一つ後ろに向かって前に進む
   if文で前後を比較して前が大きかったら交換する

  if(7 > 5)
  は7の方が大きいので交換する
  すると
  配列の中身は{8,1,5,7}になる

  2>=1なのでjのループ継続

を繰り返し行う
  if(1 > 5)
  1が小さいので交換はしない
  配列の中身は{8,1,5,7}になる

  1>=1なのでjのループ継続

を繰り返し行う
  if(8 > 1)
  8が大きいので交換する
  配列の中身は{1,8,5,7}
  になり配列の最小値1が1番左に来てソート済みになる

   >= 1は繰り返しできないのでそこでjのループを抜けて

  i = i + 1で変数iに要素を追加して外側のループ処理を開始する

  これで配列の先頭に最も小さい値が入りソート済みになる配列[1]から配列[3]で同様に中身を小さい順に並べる
  配列{8,5,7}
  からを繰り返し行って小さい順にならべていく感じです


  

Sort2.java
java.utilパッケージで作成したプログラムも載せときます

import java.util.Arrays;

class Sort2 {
    public static void main(String[] args) {
        int Sort[] = {8,1,7,5};

        Arrays.sort(Sort);
            for(int i = 0; i < Sort.length; i++);
            System.out.println(Arrays.toString(Sort));

   }

}
アルゴリズムを考えない方が明らかに楽にコードが書けますね

今回はあえてアルゴリズムを意識してプログラムを行いました
プログラムを行う上でアルゴリズムは大事になってくると思うのでこれからもアルゴリズムを意識してプログラムを書いていきたいです
とりあえず楽しみながら勉強します

おつかれさまでした



0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0