#1
by 初心マン » 8年前
c言語初心者です。二分探索法のソースコードを書いてみたのですがwhile以下でのループに異状があります。二回目まではしっかりとループして指定した数値がどこに配置しているのか教えてくれますが、三回目以降は「見つかりませんでした」の表示しかされません。これはなぜ起こるのでしょうか。解決策を教えてください。ファイルの中身は「1 2 6 43 123」の五つです。
#include <stdio.h>
#include <stdlib.h>
#define MAXDATA 10000
int main(void)
{
int x, a[MAXDATA];
int n, i;
char filename[20];
FILE *fin;
int j, k;
int tmp;
int number=sizeof(filename)/sizeof(int);
int min = 0;
int max = number-1;
int mid;
printf("file name = ");
scanf("%s", filename);
if ((fin=fopen(filename, "r"))==NULL) {
printf("ファイルをオープンできません\n");
return (1);
}
n=0;
while (fscanf(fin, "%d", &a[n])==1) n++;
fclose(fin);
for(i=0; i < n-1; i++){
j=i;
for(k=i+1; k < n; k++){
if (a[j] > a[k]){j=k; }
}
while (scanf("%d", &x)==1) {
while(min <= max ) {
mid = (min + max) / 2;
if (a[mid]==x) {
break;
} else if (a[mid] < x) {
min = mid + 1;
} else if (a[mid] > x){
max = mid - 1;
}
}
if(a[mid]==x){
printf(" x=%d ---> %d\n",x ,mid );
}
else {
printf("見つかりませんでした。\n",x);
}
}
printf("またお会いしましょう\n");
return (0);
}
c言語初心者です。二分探索法のソースコードを書いてみたのですがwhile以下でのループに異状があります。二回目まではしっかりとループして指定した数値がどこに配置しているのか教えてくれますが、三回目以降は「見つかりませんでした」の表示しかされません。これはなぜ起こるのでしょうか。解決策を教えてください。ファイルの中身は「1 2 6 43 123」の五つです。
#include <stdio.h>
#include <stdlib.h>
#define MAXDATA 10000
int main(void)
{
int x, a[MAXDATA];
int n, i;
char filename[20];
FILE *fin;
int j, k;
int tmp;
int number=sizeof(filename)/sizeof(int);
int min = 0;
int max = number-1;
int mid;
printf("file name = ");
scanf("%s", filename);
if ((fin=fopen(filename, "r"))==NULL) {
printf("ファイルをオープンできません\n");
return (1);
}
n=0;
while (fscanf(fin, "%d", &a[n])==1) n++;
fclose(fin);
for(i=0; i < n-1; i++){
j=i;
for(k=i+1; k < n; k++){
if (a[j] > a[k]){j=k; }
}
while (scanf("%d", &x)==1) {
while(min <= max ) {
mid = (min + max) / 2;
if (a[mid]==x) {
break;
} else if (a[mid] < x) {
min = mid + 1;
} else if (a[mid] > x){
max = mid - 1;
}
}
if(a[mid]==x){
printf(" x=%d ---> %d\n",x ,mid );
}
else {
printf("見つかりませんでした。\n",x);
}
}
printf("またお会いしましょう\n");
return (0);
}