写代码可以在整型有序数组中查找想要的数字

本文介绍两种在有序数组中查找特定数字的方法:线性搜索和二分查找。线性搜索逐个元素对比,而二分查找通过分割数组提高效率。文章包含具体C语言实现代码。

思路:对数组中的数字进行查找并与目标数字进行比较,一样则可以找到,不一样则没有。

方法一:在有序的数组中查找一个数字,可以用一个循环的方式将每一个数字依次查找然后挑出所求数字。

 1 #include<stdio.h>
 2 #define _CRT_SECURE_NO_WARNINGS
 3 
 4 int Find_num(int a[], int size, int num)
 5 {
 6     for (int i = 0;i < size; i++)
 7     {
 8         if (a[i] == num)
 9         {
10             return i;
11         }
12     }
13     return -1;
14 }
15 
16 int main()
17 {
18     int num = 0;
19     printf("请输入想要查询的数字:\n");
20     scanf("%d",&num);
21 
22     int a[8] = { 1,2,3,4,5,6,7,8 };
23     int size = sizeof(a) / sizeof(a[0]);
24     int find_num = Find_num(a, size, num);
25     if (find_num == -1)
26     {
27         printf("没有找到!\n");
28     }
29     else
30     {
31         printf("找到了!\n");
32         printf("%d", find_num);
33     }
34 
35     return 0;
36 }

 

方法二:因为是有序的数组,数组里的数字会按规律排列,可以利用二分法的方法,将数组分为左右两块,从中间开始和所求数字比较大小,如果所求数字在左区间则继续划分左面的区间,直到找到目标数字。这样的优点是每次可以只查找一半,不用将数组里的内容都查找完,大大提高了效率。

用二分法进行查找的时候要注意这里区间变换时,left需要+1;right则需要-1.

 

 1 #include<stdio.h>
 2 #define _CRT_SECURE_NO_WARNINGS
 3 
 4 int Find_num(int a[],int size,int num)
 5 {
 6     int left = 0;
 7     int right = size - 1;
 8     while (left <= right)
 9     {
10         int i = (left + right) / 2;
11         if (a[i] < num)
12         {
13             left = i + 1;
14             continue;
15         }
16         else if (a[i] > num)
17         {
18             right = i -1;
19             continue;
20         }
21         else
22         {
23             return i;
24         }
25     }
26     return -1;
27 }
28 
29 int main()
30 {
31     int num = 0;
32     printf("请输入想要查询的数字:\n");
33     scanf("%d", &num);
34 
35     int a[8] = { 1,2,3,4,5,6,7,8 };
36     int size = sizeof(a) / sizeof(a[0]);
37     int find_num = Find_num(a, size, num);
38     if (find_num == -1)
39     {
40         printf("没有找到!\n");
41     }
42     else
43     {
44         printf("找到了!\n");
45         printf("%d", find_num);
46     }
47 
48     return 0;
49 }

 

转载于:https://www.cnblogs.com/cuckoo-/p/10312149.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值