#include<stdio.h>
#include<stdlib.h>
#define MAX 2000
#define FMAX 20
void swap(int *x,int *y);
void quick(int a[],int left,int right);
int bin_search(int a[],int n,int key);
int lin_search(int a[],int n,int key);
int main(void)
{
int i;
int seisu[MAX];
int kosu,ky,idx0,idx1;
char fname[FMAX];
FILE *fp;
kosu=MAX;/*データ個数をkosuに代入*/
printf("Input file name:");
scanf("%s", fname);/*ファイル名の読み込み*/
fp=fopen(fname, "r");/*ファイルオープン*/
if(fp==NULL)/*ファイルオープン時のエラー処理*/
{
printf("No file found!");
exit(1);
}
/*(1)ファイルからデータをkosu個読み込み配列seisuに入れる*/
printf("Number to search:");
scanf("%d", &ky);/*キーを変数kyに入力する*/
/*(2)線形探索を行い結果を変数idx0に出力する*/
/*(3)クイックソート及び二分探索を行い結果を変数idx1に出力する*/
/*(4)(2)の線形探索、(3)の二分探索にかかった計算回数を表示する*/
fclose(fp);/*ファイルクローズ*/
return(0);
}
void swap(int *x,int *y)
{
int temp;
temp=*x;
*x=*y;
*y=temp;
}
void quick(int a[],int left,int right)
{
int pl=left;
int pr=right;
int seisu=a[(pl+pr)/2];
do
{
while(a[pl]<seisu)
pl++;
while(a[pr]>seisu)
pr--;
if(pl<=pr)
{
swap(&a[pl],&a[pr]);
pl++;
pr--;
}
}while(pl<=pr);
if(left<pr)
quick(a,left,pr);
if(pl<right)
quick(a,pl,right);
}
int bin_search(int a[],int n,int key)
{
int pl=0;
int pr=n-1;
int pc;
do
{
pc=(pl+pr)/2;
if(a[pc]==key)
return(pc);
else if(a[pc]<key)
pl=pc+1;
else
pr=pc-1;
}while(pl<=pr);
return(-1);
}
int lin_search(int a[],int n,int key)
{
int i=0;
while(1)
{
if(i==n)
return(-1);
if(a[i]==key)
return(i);
i++;
}
}