寫代碼可以在整型有序數組中查找想要的數字
阿新 • • 發佈:2019-01-24
war nbsp image 變換 個數字 include 比較大小 %d inf
思路:對數組中的數字進行查找並與目標數字進行比較,一樣則可以找到,不一樣則沒有。
方法一:在有序的數組中查找一個數字,可以用一個循環的方式將每一個數字依次查找然後挑出所求數字。
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 }
寫代碼可以在整型有序數組中查找想要的數字