C言語の二分探索法について質問です。
C言語の2分探索法について質問です。
以下のようなプログラムを作りたいのですが,途中でよく分からなくなってしまいました。添削お願いします。
入力された整数を配列に順次格納する(必ず昇順になるように入力)。0が入力された時に整数の入力を終了し,
次に入力された数字を二分探索によって配列から探索し,その配列の添字番号を出力するプログラムを作成せよ。
実行例
(例1) (例2)
9 ←入力 1 ←入力
7 ←入力 42 ←入力
69 ←入力 99 ←入力
31 ←入力 13 ←入力
93 ←入力 0 ←入力
59 ←入力 5 ←入力
17 ←入力 not found ←出力
0 ←入力
7 ←入力
2 ←出力
プログラム
#include <stdio.h>
#include <stdlib.h>
#define ARRAY_SIZE 10
int swap(int a, int b)
{
int c;
c = a;
a = b;
b = a;
}
int main(void)
{
int array[] ;
int low = 0;
int high = n - 1;
int mid;
int key;
int i, j, n;
int data;
struct node *p;
puts("整数を入力して下さい。");
for(i = 0; i < ARRAY_SIZE && scanf("%d", array + i) == 1; ++i){
if(array[i] == 0) break;
for(j = i; j > 0 && array[j-1] > array[j]; j--)
swap(array[j-1], array[j]);
}
n = i;
puts( "探索する値を入力して下さい" );
scanf( "%d", &key );
while( low <= high ) /
{
mid = (low + high) / 2;
if( array[mid] == key )
{
return ;
}
else if( array[mid] < key )
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
puts( "not found" );
return 0;
}
お礼
回答、ありがとうございます! お教えいただいたサイトにヒントが載っていたので、解けそうです。 本当にありがとうございました。 零シリーズ、面白いですよね♪