第12講 並び替えの方法その1
第7話 隣項交換繰り返し法自己再帰版
解答コード例
import java.io.*;
class w{
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,v,w,a;
v=0;
for(i=0;i<n-1;i++){
if(x[i]<x[i+1]){
w=x[i];
x[i]=x[i+1];
x[i+1]=w;
v++;
}
}
if(v>0){
a=h(g+1,x,n);
return(a);
}
else{
return(g);
}
}
}
実行例
さて、課題です。
for(i=0;i<n-1;i++){
if(x[i]<x[i+1]){
w=x[i];
x[i]=x[i+1];
x[i+1]=w;
v++;
}
}
の部分もfor文ではなく、関数の再帰的使用で実現しましょう。
第6話へ 第8話へ
VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門
基礎から応用まで第2部
初心者のための
VC++による C言語 入門 C++ 入門 基礎から応用まで第3部