Binary Search--二分查找

本文详细介绍了二分查找算法的工作原理及其实现方式。通过升序和降序两种情况的示例,展示了如何利用二分法在已排序的数组中高效地查找目标值。该算法的时间复杂度为O(lgN),适用于大量有序数据的搜索。

 

Binary Search--二分查找

  采用二分法查找时,数据需是排好序的。 基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。

  二分法查找在针对大量有序排列的情况下发挥出很优越的效率,其时间复杂度O(lgN)。

  

  代码:

 1 /*
 2 Author:Mengmeng
 3 Time:2016-6-27 23:33:49
 4 Description:
 5     采用二分法查找时,数据需是排好序的。 
 6     基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,
 7     如果当前位置值等于x,则查找成功;若x小于当前位置值,则在数列的前半段 中查找;
 8     若x大于当前位置值则在数列的后半段中继续查找,直到找到为止。
 9 */
10 #include <iostream>
11 using namespace std;
12 
13 
14 int BinarySearch(int data[],int min,int max,int dest,bool UpOrDown)
15 {
16     int mid = 0;
17     if (min > max)//递归结束条件
18     {
19         cout << "找不到" << dest << "!"<<endl;
20         return -1;
21     }
22     mid = (max + min) / 2;
23     if (dest == data[mid])//递归结束条件
24         return mid;
25     if (UpOrDown == true)//升序排列
26     {
27         if (dest < data[mid])//递归条件
28             return BinarySearch(data, min, mid - 1, dest, true);
29         else
30             return BinarySearch(data, mid + 1, max, dest, true);
31     }
32     else//降序排列
33     {
34         if (dest < data[mid])
35             return BinarySearch(data, mid + 1, max, dest, false);
36         else
37             return BinarySearch(data, min, mid - 1, dest, false);
38     }
39     
40 
41 
42 }
43 int main(void)
44 {
45     int data1[] = { 0, 11, 22,33,44,55,66,77,88,99 };
46     int data2[] = { 99, 88, 77, 66, 55, 44, 33, 22, 11, 0 };
47 #if 0
48     cout << "请参照下列数字:" << endl;
49     cout<< "{";
50     int len = sizeof(data1) / sizeof(int);
51     for (int i = 0; i < len; i++)
52         cout << data1[i] << " ";
53     cout << "}" << endl;
54     cout << "输入你要查找的目标:" << endl;
55     int dest;
56     cin >> dest;
57     cout <<"----------------------------------------"<< endl;
58     int index = BinarySearch(data1, 0, len - 1, dest,true);
59 #endif
60 #if 1
61     cout << "请参照下列数字:" << endl;
62     cout << "{";
63     int len = sizeof(data2) / sizeof(int);
64     for (int i = 0; i < len; i++)
65         cout << data2[i] << " ";
66     cout << "}" << endl;
67     cout << "输入你要查找的目标:" << endl;
68     int dest;
69     cin >> dest;
70     cout << "----------------------------------------" << endl;
71     int index = BinarySearch(data2, 0, len - 1, dest, false);
72 #endif
73     if (index!=-1)
74         cout << dest << "在数组中的位置为第" << index << "" << endl;
75     return 0;
76 
77 }

 

 

  运行结果:

  (1)升序的情况:

    

  

  (2)降序的情况:

    

 

  

转载于:https://www.cnblogs.com/codingmengmeng/p/5621945.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值