/*------------------------------------------------------------------------------ C課題6 二分探索法 (配列,scanf,while) '2003.07.13 ------------------------------------------------------------------------------*/ #include main(){ int i; int value[10], search; int low, high, middle; // 最大・最小インデックス int sflag; // 検索結果 printf("データの数値を昇順で10件入力して下さい\n"); for (i=0; i<10; i++) { // データの入力(配列) scanf("%d", &value[i]); } while(1) { // 二分探索法 printf("検索するデータを入力して下さい (/で終了)\n"); if (scanf("%d", &search)==0) break; low = 0; // 最小インデックス high = 9; // 最大インデックス sflag = 0; // 検索結果off while (low <= high && sflag==0) { // 隣接のデータの比較になるか見つかるまで middle = (low + high) /2; // 対象データの中間のインデックス if (search < value[middle]) { // 検索データが最大側にある high = middle -1; } else if (search > value[middle]) { low = middle +1; // 検索データが最小側にある } else { // 検索データが中間にある printf("検索したデータは %d 番目に見つかりました\n", middle +1); sflag = 1; // 検索結果on } } if (sflag==0) { printf("検索したデータは見つかませんでした\n"); } } }