1 #include <stdio.h> 2 /* 3 两种查找 4 */ 5 #define N 10 6 int main(void) 7 { 8 /* 9 //查找1:无序数组查找,返回下标(线性查找) 10 //思路:将需要查找的数和数组的元素逐个比较,相同返回下标,未找到返回-1 11 int lookup(int arr[],int n,int j); 12 int arr[N] = {1,2,3,-4,0,-8,33,11,22,7}; 13 int i,idx; 14 15 printf("请输入要查找的数字,退出输入q "); 16 gogogo:while(scanf("%d",&i) == 1) 17 { 18 idx = lookup(arr,N,i)+1; 19 if(idx>0) 20 printf("%d位于数组第%d位 ",i,idx); 21 else 22 printf("查无此数 "); 23 24 printf("继续请输入要查找的数字,退出输入q "); 25 goto gogogo; 26 } 27 return 0; 28 } 29 int lookup(int arr[],int n,int j) 30 { 31 int i; 32 for(i = 0;i<n;i++) 33 { 34 if(j == arr[i]) 35 return i; 36 } 37 38 return -1; 39 } 40 */ 41 /* 42 //查找2:有序数组查找(折半查找) 43 int arr[N] = {1,2,3,4,5,6,7,11,22,33}; 44 int i,idx,low,high; 45 46 printf("请输入要查找的数字,退出输入q "); 47 gogogo:while(scanf("%d",&i) == 1) 48 { 49 low = 0; 50 high = N-1; 51 while(low<=high)//当low和high相等的时候也要比较一次,即:查找的数字要和数组的头尾元素比较。 52 { 53 idx = (low+high)/2;//折半 54 if(arr[idx]>i) 55 high = idx-1; 56 else if(arr[idx]<i) 57 low = idx +1; 58 else 59 { 60 printf("%d位于数组第%d位 ",i,idx+1); 61 break; 62 } 63 } 64 if(low>high) 65 printf("查无此数 "); 66 printf("继续请输入要查找的数字,退出输入q "); 67 goto gogogo; 68 69 } 70 return 0; 71 } 72 */