赞
踩
本文简要介绍二分查找(binary search)算法的相关知识。
如果一个列表是无序的,那么顺序查找(sequential search)是唯一可选的元素查找办法;但是对于有序列表(sorted list),就可以选择效率更高的二分查找(也称折半查找)算法。
二分查找从一个列表的中间元素来测试,判断目标元素在列表的前半部分还是后半部分。如果在前半部分,就不需要查找后半部分;如果在后半部分,就不需要查找前半部分,也就是说,通过此判断可以减少一半的列表的查询工作。重复此过程直到找到目标元素的位置,或者确定目标元素不在这个列表里。
根据上述内容,可总结二分查找算法的一般解题步骤如下:
二分查找算法的示例代码如下:
- #include <stdio.h>
- #include <stdlib.h>
-
- int main()
- {
- /* 二分查找函数声明 */
- int BinarySearch(int array[], int target);
-
- int num[5] = {0};
- int i = 0;
- int target = 0;
- int loc = -1;
-
- /* 接收用户输入的5个整型数 */
- printf("please input 5 SORTED(from small to large) integer numbers: \n");
- for (i = 0; i < 5; i++)
- {
- scanf("%d", &num[i]);
- }
-
- /* 接收用户输入的待查找数字 */
- printf("please input the number to be searched: \n");
- scanf("%d", &target);
-
- /* 调用二分查找函数查找目标数字 */
- loc = BinarySearch(num, target);
-
- if (-1 == loc)
- {
- printf("number(%d) is not included in the num list!\n", target);
- }
- else
- {
- printf("location of number(%d) is %d.\n", target, loc);
- }
-
- return 0;
- }
-
- /*
- * 二分查找函数定义:此函数用于在有序的(从小到大)整型数字列表中查找给定数字的位置,
- * 如果给定数字在列表中,则返回该数字在列表中的位置,否则返回-1。
- * 数组array存放有序整型数字列表
- * target为待查找的数字
- */
- int BinarySearch(int array[], int target)
- {
- // 待搜索有序整型数字列表的起始、终止和中间位置
- int first = 0;
- int last = 4;
- int mid = -1;
-
- while (first <= last)
- {
- // 计算中间位置
- mid = first + (last - first)/2;
-
- if (target > array[mid])
- {
- first = mid + 1;
- }
- else if (target < array[mid])
- {
- last = mid - 1;
- }
- else
- {
- return mid;
- }
- }
-
- // 未找到待查找数字
- return -1;
- }
上述代码的运行结果如下:
说明:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。