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

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

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

 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("请输入想要查询的数字:
");
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("没有找到!
");
28     }
29     else
30     {
31         printf("找到了!
");
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("请输入想要查询的数字:
");
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("没有找到!
");
41     }
42     else
43     {
44         printf("找到了!
");
45         printf("%d", find_num);
46     }
47 
48     return 0;
49 }
原文地址:https://www.cnblogs.com/cuckoo-/p/10312149.html