第12講 並び替えの方法その1
第5話 隣項交換繰り返し法の解説その1
本日解説するコードは、
  public static void f(int x[],int n){
    int i;
    for(i=0;i<n;i++)x[i]=(int)(Math.random()*100);
  }
  public static void g(int x[],int n){
    int i,a;
    for(i=0;i<n;i++){
      a=(i+1)%20;
      if(x[i]<10){
        System.out.print (" ");
        System.out.print(x[i]);
        System.out.print (" ");
      }
      else{
        System.out.print(x[i]);
        System.out.print (" ");
      }
      if(i>0 && a==0)System.out.println();
    }
  }
の部分です。


  public static void f(int x[],int n){
    int i;
    for(i=0;i<n;i++)x[i]=(int)(Math.random()*100);
  }
では、100未満のランダム整数データを発生させています。
Math.random()が1未満の小数を発生させますので、
Math.random()*100は、45.46・・のような小数になります。
(int)はキャストといって、強制的に整数型に変更します。
45.46・・は小数部分が切り捨てられ45となります。
つまり、(int)(Math.random()*100);で100未満の整数が発生するわけです。

  public static void g(int x[],int n){
    int i,a;
    for(i=0;i<n;i++){
      a=(i+1)%20;
      if(x[i]<10){
        System.out.print (" ");
        System.out.print(x[i]);
        System.out.print (" ");
      }
      else{
        System.out.print(x[i]);
        System.out.print (" ");
      }
      if(i>0 && a==0)System.out.println();
    }
  }
はデータを表示させるための関数です。
      if(x[i]<10){
        System.out.print (" ");
        System.out.print(x[i]);
        System.out.print (" ");
      }
      else{
        System.out.print(x[i]);
        System.out.print (" ");
      }
の部分は、fで発生するデータが2桁以下の整数とわかっていますので、
1桁の場合と2桁の場合について、場合分けをしています。
ifの方が1桁を担当し、elseが2桁を担当しています。
        System.out.print (" ");
        System.out.print(x[i]);
でスペース部分を含めて2桁になりますので、
1桁の整数、2桁の整数いずれの場合も2桁表示に統一されるわけです。
      a=(i+1)%20;

      if(i>0 && a==0)System.out.println();
は何の働きをしているでしょうか。
(i+1)%20はi+1を20で割ったときの余りです。
それが0のとき改行しなさい、ということですが、
i>0入れておかないと、1個目で改行してしまい、おかしなことになってしまいます。

次話では、このプログラムのエンジンともいうべき
  public static int h(int x[],int n){
    int i,j,a,v,w;
    for(i=0;i<n;i++){
      v=0;
      for(j=0;j<n-1;j++){
        if(x[j]<x[j+1]){
          w=x[j];
          x[j]=x[j+1];
          x[j+1]=w;
          v++;
        }
      }
      if(v==0)break;
    }
    return(i);
  }
の部分について解説しましょう。



第4話へ 第6話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座

初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部