75日目 K&R3.3と格闘中
なんか基本をおざなりにしたまま進んでしまった感がある…
とりあえずbinsearch()を使える形にしてみた。
array[]の要素とsを、自分で入力した値でできるように修正しないといけないね。
// from K&R p.58 (Japansese p.70) #include <stdio.h> int binsearch(int x, int v[], int n); int main() { int s, array[6] = {12, 25, 33, 46, 58}, i, num; s = 22; i = 0; printf("s = %d\n", s); // print s printf("array[] = "); // print array for sure for(i = 0; i < 5; i++) printf("%d ", array[i]); printf("\n\n"); num = binsearch(s, array, i); if (num != -1) //check if s is found or not printf("s is found at %d", num + 1); else printf("s is not found in array[]"); return 0; } /* binsearch: find x in v[0] <= v[1] <= ... <v[n-1] */ int binsearch(int x, int v[], int n) { int low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low + high) / 2; if (x < v[mid]) // focuses on the lower half high = mid -1; else if (x > v[mid]) // on the upper half low = mid+1; else // found match return mid; } return -1; // no match }
実行結果
s = 25 array[] = 12 25 33 46 58 s is found at 2
このsの値をいじくるのをファイル書き換え→再コンパイルってやってるのが恥ずかしいな。
getchar云々がいまだに頭に染み付いてないので本見ないとできない
s = 22 array[] = 12 25 33 46 58 s is not found
今回やりたいことは、課題(Excercise)の3.1なのでそこまでどうにかたどり着けるようがんばる。