查找有很多种:数组下标查找,二叉平衡树查找等等....
下面来介绍一种很好用的查找方式——二分查找。据我了解,这玩意好像是基于牛顿的二分法设计的.....不管了,我也不是学数学的(数学也是很重要的,一定要好好学)。
二分查找使用的前提是已经排好了顺序(逆序升和逆序降都可以),将要查找的数据同数组中间的数据进行比较(哦对了,我是以不重复的数据进行举例同时是同数组进行存储数据)。如果要比较的数据等于中间数据就输出下标(哦哦哦,这里我用升序来举例),如果要比较的数据比中间数据小,就缩小范围变为原来的一半(在左侧哦)。如果比中间大就反过来(缩小一半,取右侧)
代码如下:
int seach(int *arr,int m,int length){
int i=0;
int left=0,right=length-1;//数组的范围
while(m!=arr[i]||left!=right){//如果找到就退出或者还有一个数据(左右端同)
if(m==arr[(left+right)/2]){//找到
i=(left+right)/2;
break;
}
else if(m<arr[(left+right)/2]){//比中间小
right=(left+right)/2-1;//右端左移
}else{//比中间大
left=(left+right)/2+1;//左端右移
}
}
//这里可以排除重复元素
//请自行添加:
return i;
}