查找算法(二)二分搜索法

二分搜索法适用于有序的数组,比如[1,3,5,7,9]这样的数组适合用二分搜索法查找元素。

假设存在一个数组为从小到大顺序排序。

二分思想:

(1)首先,我们视数组所有元素为当前查询范围

(2)拿当前查询范围中间的那个元素与要查元素比较,如果值想等,则查找成功,推出查找任务;如果值小于要查的那个元素的值,则取数组前半部分为当前查询范围;如果值大于要查的那个元素的值,则取数组前半部分为当前查询范围。

(3)重复步骤(2)。

实例代码:

//

//  main.cpp

//  BinSearch

//

//  Created by 胡士伟 on 16/6/8.

//  Copyright © 2016胡士伟. All rights reserved.

//

#include <iostream>

using namespace std;

int binSearch(int data[],int k,int n)  //二分搜索法

{

    int low=0,high=n-1;

    int mid;

    while(low<=high)

    {

        mid=(low+high)/2;

        if(data[mid]==k)

        {

            return mid;

        }

        else if(data[mid]>k)

        {

            high=mid-1;

        }

        else

        {

            low=mid+1;

        }

    }

    

    return1;

    

}

void swap(int *a,int *b)  //交换两个数

{

    int temp;

    temp=*a;

    *a=*b;

    *b=temp;

}

void sort(int data[],int n) //冒泡排序,下沉法

{

    while(n>=0)  //最多n趟排序

    {

        for(int j=0;j+1<=n;j++)//n个元素两两比较

        {

            if(data[j]>data[j+1])

            {

                swap(data[j],data[j+1]);

            }

        }

        n–;

    }

}

int main(int argc,const char * argv[]) {

    // insert code here…

    int a[9]={44,23,36,57,24,58,2,5,0};

    int n=sizeof(a)/sizeof(a[0]);

    sort(a,n);

    cout<<排序后的数组为:;

    for(int i=0;i<n;i++)

    {

        cout<<a[i]<<” “;

    }

    cout<<endl;

    cout<<数组中总共有<<n<<个元素<<endl;

    int s=binSearch(a,36,n);

    if(s>=0)

    {

        cout<<查找成功!<<endl;

        cout<<位置在排序后数组的第<<s<<!”<<endl;

    }

    else

    {

        cout<<查找失败;

    }

    return 0;

}

运行结果如下:

排序后的数组为:0 2 5 23 24 36 44 57 58 

数组中总共有9个元素

查找成功!

位置在排序后数组的第5!

Program ended with exit code: 0

    原文作者:查找算法
    原文地址: https://blog.csdn.net/hushiwei1993/article/details/51616695
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞