第12講 並び替えの方法その1
第8話 隣項交換繰り返し法2重自己再帰版
解答コード例
import java.io.*;
class b{
  public static void main(String args[])throws IOException {
    BufferedReader p = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("キーボードからデータ数を入力してください。");
    System.out.print ("データ数=");
    int n,k;
    int[] x=new int[1000000];
    n=Integer.parseInt(p.readLine());
    f(x,n);//データ発生
    g(x,n);//データ表示
    double hj = System.currentTimeMillis();
    k=h(0,x,n);//データ並び替え
    double ow = System.currentTimeMillis();
    System.out.println("並び替え後");
    g(x,n);//データ表示
    System.out.print (k);
    System.out.println("巡目に並び替えに成功しました。");
    System.out.println("並び替えにかかった時間は"+(ow-hj)/1000+"秒です。");
  }
  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 int h(int g,int x[],int n){
    int i,a;
    if(i(0,x,n)>0){
      a=h(g+1,x,n);
      return(a);
    }
    else{
      return(g+1);
    }
  }
  public static int i(int g,int x[],int n){
    int j,w,h=0;
    if(g+1<n-1)h=i(g+1,x,n);
    if(x[g]<x[g+1]){
      w=x[g];
      x[g]=x[g+1];
      x[g+1]=w;
      h=1;
    }
    return(h);
  }
}
実行例
入門

実行速度は、第2話で作ったプログラム=隣項交換繰り返し法自己再帰版>隣項交換繰り返し法2重自己再帰版
今回作ったものが1番遅いようです。
また、隣項交換繰り返し法自己再帰版はデータ数が5000程度が限界
隣項交換繰り返し法自己再帰版に関してはデータ数が4000程度が限界のようです。
理由は、申し訳ありませんが???です。

結局扱えるデータ数の処理速度で分配は第2で作ったものに上がりそうです。





第7話へ 第13講第1話へ

戻る

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

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