思路:对数组中的数字进行查找并与目标数字进行比较,一样则可以找到,不一样则没有。
方法一:在有序的数组中查找一个数字,可以用一个循环的方式将每一个数字依次查找然后挑出所求数字。
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
时间: 2024-07-30 11:35:25