c 二分查找算法

/*
   二分查找法:
   优点:比较次数少,查找速度快,平均性能好
   缺点:查找表要求是有序序列,且插入删除困难
   使用范围:折半查找方法适用于不经常变动而查找频繁的有序列表
   原理:假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
   时间复杂度:假设其数组长度为n,其算法复杂度为o(log(n))
   注意事项:
*/

#ifndef MY_BINARYSEARCH_H
#define MY_BINARYSEARCH_H

#ifdef __cplusplus
extern "C"
{
#endif
typedef int (*BSCompareFunc)(void *data1, void *data2);


int binarySearchShowForInt(int array[], int lenght, int find);


int binarySearchShow(void **array, int lenght, void *FindData, BSCompareFunc compareFunc);


#ifdef __cplusplus
}
#endif

上面的是.h头文件

下面的是原文件

#include "myBinarySearch.h"


/*
int array[]: 被查找的数组
int lenght : 被查找的数组的长短
int find   : 要查找的数据
*/
int binarySearchShowForInt(int array[], int lenght, int find)
{
if(array == 0 || find == 0)
{
return -1;
}
int start = 0;
int end = lenght-1;

while(start <= end)
{
int middle = start +((end-start)>>1);  //中间序列
if(array[middle] == find)
{
return middle;
}
else if(array[middle]<find)
{
start = middle+1;
}
else
{
end = middle-1;
}
}
return -1;
}


/*
  void **array: 被查找的数组
  int lenght  : 被查找的数组长度
  void *FindData: 要查找的数据
  BSCompareFunc compareFunc: 数据比较函数
*/
int binarySearchShow(void **array, int lenght, void *FindData, BSCompareFunc compareFunc)
{
if(array == 0 || FindData ==0)
{
return -1;
}
int start = 0;
int end = lenght -1;


while(start <= end)
{
int middle = start +((end-start)>>1);
int icompare = compareFunc(array[middle], FindData); 
if(icompare == 0)
{
return middle;
}
else if(icompare <0)
{
start = middle+1;
}
else
{
end = middle -1;
}
}
return -1;
}

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值