查找算法
1 #include <stdio.h>
2 #include <stdlib.h>
3 /*顺序查找*/
4 int line_find(int *arr,int size,int pos)
5 {
6 int i=0;
7 for(i=0;i<size;i++)
8 {
9 if(arr[i]==pos)
10 {
11 return i;
12 }
13 }
14 return -1;
15 }
16 /*二分查找*/
17 int half_find(int arr[],int size,int key)
18 {
19 int left=0;
20 int right=size-1;
21 while(left<=right)
22 {
23 int mid=(left+right)/2;
24 if(key>arr[mid])
25 {
26 left=mid+1;
27 }
28 else if(key<arr[mid])
29 {
30 right=mid-1;
31 }
32 else
33 {
34 return mid;
35 }
36 }
37 return -1;
38 }
39 int main()
40 {
41 int data[]={9,6,2,0,4,5,8,1,7,3};
42 int key=12;
43 int size=sizeof(data)/sizeof(data[0]);
44 int pos=line_find(data,size,key);
45 printf("%d %d\n",sizeof(data),sizeof(data[0]));
46 if (pos==-1)
47 {
48 printf("该数组中不存在%d这个数\n",key);
49 }
50 else
51 {
52 printf("%d数字所在的位置为:%d\n",key,pos);
53 }
54
55 int data2[]={10,13,24,35,41,51,64,70,89,100};
56 int key2=35;
57 int size2=sizeof(data2)/sizeof(data2[0]);
58 int pos2=half_find(data2,size2,key2);
59 if(pos2==-1)
60 {
61 printf("查无此数\n");
62 }
63 else
64 {
65 printf("%d数字所在的位置为:%d\n",key2,pos2);
66 }
67 return 0;
68 }