二分部查找
查找,想必大家都知道是什么意思。其中有顺序查找,二分查找,哈希查找等。今天给大家介绍一下二分查找,也叫做折半查找,它的定义其实很简单,好比你要找一个数字,在所有的关键字中,先找到最中间的那个数字,如果你所找的数字比它大,则可以折一半,以此类推,就可以找到你所需要的数字。
例如1 2 3 4 5 6 7 8 9 10这10个顺序的数字,如果要查找8这个数字,我们先可以其中位置在中间的数字,由于是偶数个数字,则可以先找到5,发现比5大,于是可以把位置定到5的右边,再找中间的数字,最后会找到数字8。函数代码如下
int SearchNum(int num[],int key,int length)//num表示数组,key为所需要查询的关键字,length为数组长度
{
int left = 0;//做左边位置
int right = LENGTH - 1;//最右边位置
int mid = 0;//数组的中间位置
while(left<=right){ //查询条件,如果跳出while循环则表示查找失败
mid=(right + left)/2;
if(num[mid]<key){
left = mid + 1;
}
else if(num[mid]>key){
right = mid - 1;
}
else if(num[mid]==key){
return mid+1;//查找成功,返回其位置
}
}
return 0;//未查找到则返回0
}
代码写的不是很规范大家将就着看看咯,整体代码如下
#include<stdio.h>
#define LENGTH 10
int SearchNum(int num[],int key,int length)//num表示数组,key为所需要查询的关键字,length为数组长度
{
int left = 0;//做左边位置
int right = LENGTH - 1;//最右边位置
int mid = 0;//数组的中间位置
while(left<=right){ //查询条件,如果跳出while循环则表示查找失败
mid=(right + left)/2;
if(num[mid]<key){
left = mid + 1;
}
else if(num[mid]>key){
right = mid - 1;
}
else if(num[mid]==key){
return mid+1;//查找成功,返回其位置
}
}
return 0;//未查找到则返回0
}
int main()
{
int arr[LENGTH];
int i = 0;
int word;
printf("请输入%d个顺序的数字:\n",LENGTH );
for(i = 0;i<LENGTH;i++){
scanf("%d",&arr[i]);
}
printf("请输入你所需要的查询的数字:\n");
scanf("%d",&word);
if(SearchNum(arr,word,LENGTH)==0){
printf("没有找到\n");
}
else{
printf("已经找到,位置是在%d\n",SearchNum(arr,word,LENGTH));
}
return 0;
}
此外,祝大家新年快乐
武汉加油!!!
中国加油!!!