写代码可以在整型有序数组中查找想要的数字
Posted cuckoo-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写代码可以在整型有序数组中查找想要的数字相关的知识,希望对你有一定的参考价值。
思路:对数组中的数字进行查找并与目标数字进行比较,一样则可以找到,不一样则没有。
方法一:在有序的数组中查找一个数字,可以用一个循环的方式将每一个数字依次查找然后挑出所求数字。
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 }
以上是关于写代码可以在整型有序数组中查找想要的数字的主要内容,如果未能解决你的问题,请参考以下文章