学习内容:
折半查找就是把所要找的对象与中间的数比较,如果小于中间的数即在前半部分,所以可以只取前半部分同样与前半部分的中间的数比较,以此类推。
int
main
()
{
int
arr
[]
=
{
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
10
};
int
left
=
0
;
int
right
=
sizeof
(
arr
)
/
sizeof
(
arr
[
0
])
-
1
; //计算数组下标的最大值,left和right构成了寻找的区间。
int
key
=
7
;
int
mid
=
0
;
while
(
left
<=
right
)
{
mid
=
(
left
+
right
)
/
2
; //计算数组中间值的下标
if
(
arr
[
mid
]
>
key
) //中间值大于所要找的对象,所以只需要在前半部分寻找
{
right
=
mid
-
1
; //修改所要找的区间
}
else if
(
arr
[
mid
]
<
key
) //中间值小于所要找的对象,所以只需要在前半部分寻找
{
left
=
mid
+
1
; //修改所要找的区间
}
else
break
;
}
if
(
left
<=
right
)
printf
(
"
找到了
,
下标是
%d\n"
,
mid
);
else
printf
(
"
找不到
\n"
); //while循环做完后如果还是left<=right说明是循环中最后的else执行了即找到 了对象,如果循环做完后不是left<=right说明是找遍了都找不到跳出了循环(因为while的循环条件也是
left
<=
right
)
}