http://baike.baidu.com/link?url=AAw3zskmXDYV1yl8VrsN1v51oCYrUQa00WWR2GA6gULwAloSdMBDFVqS3S1MwqlLEvirY4Pndh56aM3qtJhf4Kphp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
public
class
BubbleTest
{
public
static
int
binary(
int
[] array,
int
value)
{
int
low =
0
;
int
high = array.length -
1
;
while
(low <= high)
{
int
middle = (low + high) /
2
;
if
(value == array[middle])
{
return
middle;
}
if
(value > array[middle])
{
low = middle +
1
;
}
if
(value < array[middle])
{
high = middle -
1
;
}
}
return
-
1
;
}
public
static
void
main(String[] args)
{
int
[] a = {
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
};
int
value = binary(a,
9
);
System.out.println(value);
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#include <stdio.h>
//遞歸算法
int
recurbinary(
int
*a,
int
key,
int
low,
int
high)
{
int
mid;
if
(low > high)
return
-1;
mid = (low + high)/2;
if
(a[mid] == key)
return
mid;
else
if
(a[mid] > key)
return
recurbinary(a,key,low,mid -1);
else
return
recurbinary(a,key,mid + 1,high);
}
//非遞歸算法
int
binary(
int
*a,
int
key,
int
n )
{
int
left = 0, right = n - 1, mid = 0;
mid = ( left + right ) / 2;
while
( left < right && a[mid] != key )
{
if
( a[mid] < key )
left = mid + 1;
else
if
( a[mid] > key )
right = mid - 1;
mid = ( left + right ) / 2;
}
if
( a[mid] == key )
return
mid;
return
-1;
}
int
main()
{
int
a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
int
b[] = { 677, 1, 7, 11, 67 };
int
i;
for
( i=0; i<
sizeof
(b)/
sizeof
(b[0]); i++ )
{
printf
(
"%d\n"
, recurbinary(a,99,0,
sizeof
(a)/
sizeof
(a[0])-1) );
//printf( "%d\n", binary( a, 45, sizeof(a)/sizeof(a[0])));
}
return
0;
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include<iostream>
#define N 10
using
namespace
std;
int
main()
{
int
a[N],front,end,mid,x,i;
cout<<
"請輸入已排好序的a數組元素:"
<<endl;
for
(i=0;i<N;i++)
cin>>a[i];
cout<<
"請輸入待查找的數x:"
<<endl;
cin>>x;
front=0;
end=N-1;
mid=(front+end)/2;
while
(front<end&&a[mid]!=x)
{
if
(a[mid]<x)front=mid+1;
if
(a[mid]>x)end=mid-1;
mid=(front+end)/2;
}
if
(a[mid]!=x)
printf
(
"沒找到!\n"
);
else
printf
(
"找到了,在第%d項裏"
,mid+1);
return
0;
}
pascal代碼
function found(a,b,c:longint):longint;
var d,e:longint;
begin
d:=(a+b)
div
2;
if
m[d]=c then found:=d{找到了數字所在位置}
else
if
m[d]<c then
if
(d+1)>b then found:=0{代表不在數列之中}
else
found:=found(d+1,b,c){查找比m[d]大的數}
else
if
(d-1)<a then found:=0
else
found:=found(a,d-1,c){查找比m[d]小的數};
end;
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<?php
functionbinarySearch(
$array
,
$val
){
$count
=
$array
();
$low
=0;
$high
=
$count
-1;
while
(
$low
<=
$high
){
$mid
=
intval
((
$low
+
$high
)/2);
if
(
$mid
==
$val
){
return
$mid
;
}
if
(
$mid
<
$val
){
$low
=
$mid
+1;
}
else
{
$high
=
$mid
-1;
}
}
returnfalse;
}
?>
|