查找: 二分法

 查找:通常使用顺序查找和二分法。

顺序查找:从第一个开始查找,往后依次推。

二分查找:从中间数开始查找,再通过对比。如果所需找的数比中间数大,则在中间数的后面找,如果比中间数小,则从中间的数的前面找,依次反复查找。(前提是数列按照从小到大排序)

对于小规模查找,顺序查找思维逻辑简单,代码简单。二分法则思维逻辑相对复杂,代码也复杂。

对于大规模查找,顺序查找运算量相对大,二分法运算量小,并且运算快。

例如:在数组{1,2,3,4,5,6,7,8,9}中找出数字7是第几个数。

        顺序查找:先判断第一个数是不是7,如果不是则判断下一个数。

        二分法:先判断中间的数是不是7,如果不是,就与中间的数5比较,比5大,则在5后面的数查找,在数列{6,7,8,9}当中再找中间数,进行比较。

代码如下:顺序查找


#include<stdio.h>
int main(){
    int n,i,flog=0;//flog表示是第几位数
    int a[10]={1,2,3,4,5,6,7,8,9};
    printf("请输入你要查找的数:");
    scanf("%d",&n);
    for(i=0;i<10;i++){
    if(n==a[i])flog=i+1;
    }
    if(i==0)printf("没有你要查找的数");
    else printf("%d是地%d个数",n,flog);
    return 0;
}

        二分查找

#include<stdio.h>
int main() {
	int a[10] = { 1,2,3,4,5,6,7,8,9 };
	int n, i;
	int mid, max = 8, min = 0;//分别表示中间数的下标,最大值的小标,最小值的小标。
	printf("请输入你要查找的数:");
	scanf("%d", &n);
	while (max >= min) {
		mid = (max + min) / 2;
		if (n > a[mid])min = mid + 1;//如果查找的数比中间数大,则从中间数后面,再次找中间数
		if (n < a[mid])max = mid - 1;//如果查找的数比中间数小,则从中间数前面,再次找中间数
		if (n == a[mid]) {
			printf("%d是第%d个数", n, mid + 1);
			break;
		}
	}
	if (max < min)printf("没有查找的数");
	return 0;
}

注意:二分法使用的前提是在按升序排序(或者降序)的一列数中使用。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值