開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: C
- Clang (コンパイラ)
プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第3章(制御の流れ)3.1(文とブロック)、3.2(If-Else)、3.3(Else-If)の演習3-1を解いてみる。
その他参考書籍
- プログラミング言語Cアンサー・ブック 第2版 (クロビス・L.トンド、スコット・E.ギンペル(著)、矢吹 道郎(翻訳))
演習 3-1.
コード
sample.c
#include <stdio.h>
int binsearch(int x, int v[], int n);
int main()
{
int x = 1;
int v[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10;
int i;
for (i = 0; i < 1000000000; i++) {
binsearch(x, v, n);
}
return 0;
}
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]) {
high = mid - 1;
} else if (x > v[mid]) {
low = mid + 1;
} else {
return mid;
}
}
return -1;
}
入出力結果(Terminal)
$ time ./a.out real 0m26.451s user 0m26.127s sys 0m0.023s $
コード
sample.c
#include <stdio.h>
int binsearch(int x, int v[], int n);
int main()
{
int x = 1;
int v[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = 10;
int i;
for (i = 0; i < 1000000000; i++) {
binsearch(x, v, n);
}
return 0;
}
int binsearch(int x, int v[], int n)
{
int low, high, mid;
low = 0;
high = n - 1;
mid = (low + high) / 2;
while (low <= high && x != v[mid]) {
if ( x < v[mid]) {
high = mid - 1;
} else {
low = mid + 1;
}
mid = (low + high) / 2;
}
if (x == v[mid]) {
return mid;
}
return -1;
}
入出力結果(Terminal)
$ time ./a.out real 0m27.962s user 0m27.817s sys 0m0.018s $
ループ内で1回だけテストするプログラムの方がループ内で2回テストするプログラムより、sys時間が速くなった。
0 コメント:
コメントを投稿