1. 程式人生 > >寫代碼可以在整型有序數組中查找想要的數字

寫代碼可以在整型有序數組中查找想要的數字

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 }

寫代碼可以在整型有序數組中查找想要的數字