数据结构之对分查找算法

      一 、前提条件:对分查找的前提是待查找的数据必须是有序的

     二、思想:对分查找是一种效率很高的查找方法,但被查找的数据必须是有序(例如非递减有序)的。对分查找首先将查找键与有序数组内处于中间位置的元素进行比较,如果中间位置上的元素内的数值与查找键不同,根据数组元素的有序性,就可确定应该在数组的前半部分还是后半部分继续进行查找;在新确定的范围内,继续按上述方法进行查找,直到获得最终结果。

     

        在数组中的数据是有序的,如果是增序的,是指下标越小的数组元素中存储的数据也越小,减序则相反。设数组变量d中存储了n个互不相同的数据,则数组变量d中的数据是增序时,有:
          d(1)<d(2)<…d(i)<d(i+1)<…<d(n-1)<d(n)

   三、优势
  
         由于对分查找没查找一次,查找范围就将缩小一半,因此效率要远远高于顺序查找。

  C语言代码实现:
  
//BinarySearch.h
#ifndef BINARYSEARCH_H
#define BINARYSEARCH_H
#define Notfound -1
#include<stdio.h>
int BinarySearch(int *,int ,int );

#endif

//BinarySearch.c

#include"Binarysearch.h"
int BinarySearch(int array[] , int x, int size)
{
int low=0;
int high = size-1;
int mid;
while(low<=high)
{
mid = (low + high)/2;
if(array[mid]<x)
{
 low = mid + 1;
}
else if(array[mid]>x)
{
 high=mid-1;
}
else
return mid;
}
return Notfound;
}


//main.c

#include"BinarySearch.h"
int main()
{
int array[] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11};
    int size = sizeof(array)/sizeof(int);
int x = 5;
int index = BinarySearch(array,x,size);
printf("the index is %d\n",index);
return 0;
}





    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值