第21講 並び替えの方法その1 
第3話 隣項交換繰り返し法解説その1
本話では、
#include<iostream>
#include<ctime>
#include<stdlib.h>
using namespace std;
using namespace System;
void f(int a,int *m);
void g(int a,int *m);
int main(){
  srand(static_cast<unsigned int>(time(0)));
  int n,*m;
  m=(int *)malloc(2000000);
  cout<<"発生させるデータ数をキーボードから入力してください。"<<endl<<"データ数=";
  scanf("%d",&n);
  f(n,m);
  DateTime^ hj=DateTime::Now; //開始時間
  g(n,m);
  DateTime^ ow=DateTime::Now; //終了時間
  TimeSpan sa=ow->Subtract(*hj); //経過時間の計算
  cout<<"並び替え時間は"<<sa.TotalSeconds<<"秒です。"<<endl;
}
の部分を解説します。
#include<ctime>はsrand(static_cast<unsigned int>(time(0)));のピンクの部分のために必要です。
srand(・);は・の部分に整数を入れることによって、
乱数系列を決めることができます。
・の部分をシード値といいます。
乱数はシード値を変えると、系列を変えることができます。
シード値を指定しないといつも同じ順番で乱数は発生することになってしまいますので、
ソフト起動する度に異なるデータが発生するようにsrand(static_cast<unsigned int>(time(0)));を入れています。
static_cast<unsigned int>は強制的にDateTime^型のデータを符号なしのint型に変更するものです。
つまり、キャストです。
time(0)の0は取得したデータを収納する変数のアドレスを指定しています。
つまり、現時刻を指定してアドレスが0であるメモリーにデータを収納しているということだと思います。
  int n,*m;
  m=(int *)malloc(2000000);
nはscanfで取得するデータ数を扱う変数です。
*mは、関数fと関数gにおいて送られるポインタです。
正確には、引数で送るのは変数のアドレスでした。
m=(int *)malloc(2000000);
はポインタの初期化です。
配列の要素数は2000000÷4=500000です。
ここまで要素数が必要か疑問ですが、大きめにとっておきました。
大きなデータを入れて、後に扱う3つの方法と比べて処理速度がどうかを問題にするためです。
f(n,m);はデータ数nとポインタ*mのアドレスを引数にして送っています。
  DateTime^ hj=DateTime::Now; //開始時間
は現時刻の取得です。ここでも#include<ctime>が活かされています。
g(n,m);はfと同様です。
  DateTime^ ow=DateTime::Now; //終了時間
  TimeSpan sa=ow->Subtract(*hj); //経過時間の計算
  cout<<"並び替え時間は"<<sa.TotalSeconds<<"秒です。"<<endl;
は順に終了時点の現時刻を取得し、
次の行では、初めの時刻と終わりの時刻差を計算しています。
3行目は、その時刻差を秒の単位で表示させています。



第2話へ 第4話へ

戻る

C言語 C++講義第1部へ
C言語 C++講義第2部へ
VB講義へ
VB講義基礎へ

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