• 締切済み

線形探索と二分探索

線形探索と二分探索のプログラムを作成中です。 自力(本やwebに落ちているサンプルを参考にして)でここまで作りましたが正直自信がありません。どうかお願いします。 #include <stdio.h> #define ARRAYI1_MAX sizeof(array1) #define ARRAYI2_MAX sizeof(array2) //int binary_search(int*,int,int); //二分探索関数のプロトタイプ宣言 int liner_search(int*,int,int); //線形探索関数のプロトタイプ宣言 void main(void) { int array1[]={2,3,5,8,12,20,32,52}; int array2[]={22,34,65,66,12,33,43,5,1}; int result,key; printf("探す文字を入力して下さい。\n"); sacnf("%d",&key); result=liner_search(array1,ARRAYI1_MAX,key); if(result<0){ printf("見つかりませんでした\n");} else{ printf("%d番目に見つかりました\n",result);} } //線形探索 int liner_search(int*array,int num_array,int key) { int i=0; for(i=0;i<result;i++) } /*二分探索 int binary_search(int*array,int num_array,int key) { }*/

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

バイナリサーチって、ソートされていない配列には適用できませんよ。 array1がキーでarray2がデータという意味ならいいんですけど、array1とarray2のサイズが違いますね。 リニアサーチでは、配列を先頭から最後まで全部探せばいいので、悩むようなことはないですね。 だから、 for(i=0;i<result;i++)というより for(i=0;i<ARRAYI1_MAX;i++)でいいのでは バイナリサーチは、真ん中の値を引っ張り出してその大きさで真ん中より前か後かを決めて、次の部分の真ん中をまた探せばいいです。 ガンバレo(^-^)o

  • Traja
  • ベストアンサー率19% (107/546)
回答No.1

>ここまで作りました って、本質的な部分は全く手が着いていない状態では? int i=0; ・・・・・(1) for(i=0;i<result;i++)・・(2) (2)のfor文で、i=0として初期化するので、(1)で値を初期化する必要なし (2)のresultは、どこで宣言してますか?値は?

kouhei1015
質問者

補足

#include <stdio.h> #define ARRAYI1_MAX sizeof(array1) #define ARRAYI2_MAX sizeof(array2) int binary_search(int*,int,int); //二分探索関数のプロトタイプ宣言 int liner_search(int*,int,int); //線形探索関数のプロトタイプ宣言 void main(void) { int array1[]={2,3,5,8,12,20,32,52}; int array2[]={22,34,65,66,12,33,43,5,1}; int result;//ここでresultを宣言していますが、グローバル関数の方が良いのでしょうか? int key; printf("探す文字を入力して下さい。\n"); sacnf("%d",&key); result=liner_search(array1,ARRAYI1_MAX,key); if(result<0){ printf("見つかりませんでした\n");} else{ printf("%d番目に見つかりました\n",result);} } //線形探索 int liner_search(int*array,int num_array,int key) { int i; for(i=0;i<result;i++) } //二分探索 int binary_search(int*array,int num_array,int key) { }