二分查找。

简介: 查找的数据必须是有序的。

二分查找

  主要思想(技巧):
1.查找的数据必须是有序的。

2.在比较过程中如果比较数据(即a[mid])大于查找数据则再向递减部分查找,    否则再向递增部分查找。
3.两个端点low、和high变换时,因为mid已经比较过,所以low=mid+1;

  high=mid-1;

(先看代码和图例,再看上述思想)

图例

有数组a,有如下数据
带查找元素为4

2345_image_file_copy_73.jpg

当传参,进入f函数后

low=0;

high=length-1;

2345_image_file_copy_74.jpg

因为low<=high(0<=5)

所以进入while循环

循环内确定中间元素a[mid],mid=(low+high)/2,即(0+5)/2=2

2345_image_file_copy_75.jpg

因为4>a[mid],即4>a[2],即4>3

所以low=mid+1

2345_image_file_copy_76.jpg

本次while循环结束

因为low<=high(3<=5)

所以再次进入while循环

循环内确定中间元素a[mid],mid=(low+high)/2,即(3+5)/2=4

2345_image_file_copy_77.jpg

因为4<a[mid],即4<a[4],即4<5

所以high=mid-1

2345_image_file_copy_78.jpg

本次while循环结束

因为low<=high(3<=3)

所以再次进入while循环

循环内确定中间元素a[mid],mid=(low+high)/2,即(3+3)/2=3

2345_image_file_copy_79.jpg

因为4==a[mid],

所以返回下标mid(3)

结束

#include<stdio.h>
#define N 6//定义数据元素的长度
int f(int *a,int length,int key){
  int low,high,mid;
  low=0;
  high=length-1;
  while(low<=high){
    mid=(low+high)/2;//整除
    if(key==a[mid]){
      return mid;//找到返回数组下标
    }else{
      if(key>a[mid]){
        low=mid+1;
      }else{
        high=mid-1;
      }
    }
  }
  return -1;//找不到返回下标
}
int main(){
  int a[N]={1,2,33,45,54,66};//一组有序的数据
  int num;//用于存储返回的下标
  //参数:1.数组的地址,2.数组长度,3.待查找元素
  num=f(a,N,66);
  printf("%d\n",num);//输出返回值
  return 0;
}
相关文章
|
8月前
|
算法
【算法专题突破】二分查找 - 704. 二分查找(16)
【算法专题突破】二分查找 - 704. 二分查找(16)
18 0
|
9月前
|
算法 索引
二分查找(详解)
二分查找(详解)
|
1月前
|
算法 索引
二分查找(一)
二分查找(一)
|
1月前
|
算法 索引
二分查找(二)
二分查找(二)
|
1月前
|
算法 C++
C++021-C++二分查找
C++021-C++二分查找
C++021-C++二分查找
|
8月前
OI中的二分查找
简要介绍二分查找的优势,思想与做法。
37 0
|
9月前
|
算法 索引
【二分查找】
【二分查找】
|
11月前
|
算法 C语言
这就是二分查找?
本文通过简单的猜数字小游戏向大家介绍二分查找的基本原理。
95 2
|
11月前
二分查找
二分查找
二分查找
|
存储 算法
6-2 二分查找
6-2 二分查找
130 0

热门文章

最新文章