- #include <stdio.h>
- #include <stdlib.h>
- // 先进行排序, 在进行查找
- void sort(int arr[10])
- {
- int i,j,idx;
- for(i=0;i<9;i++)
- {
- idx =i;
- for(j=i+1;j<10;j++)
- {
- if(arr[idx]>arr[j])
- idx = j;
- }
- if(idx!=i)
- {
- int temp = arr[i];
- arr[i] = arr[idx];
- arr[idx] = temp;
- }
- }
- }
- int find(int *arr,int findData)
- {
- int low=0,mid,high=9;
- int idx=-1;
- while(low<=high)
- {
- mid = (low+high)/2;
- if(arr[mid]==findData)
- {
- idx = mid;break;
- }
- // 找的数比中间值小, 不要了, 包括中间值, 变更最高位, 减一除去了 mid 值
- else if(arr[mid]>findData)
- high = mid - 1;
- else if(arr[mid]<findData)
- low = mid + 1;
- }
- return idx;
- }
- void print(int arr[10])
- {
- for(int i=0;i<10;i++)
- {
- printf("%d\n",arr[i]);
- }
- }
- void main()
- {
- int arr[10];
- int findData,idx;
- for(int i=0;i<10;i++)
- {
- arr[i] = rand()%100;
- }
- print(arr);
- sort(arr);
- putchar(10);
- print(arr);
- scanf("%d",&findData);
- idx = find(arr,findData);
- if(idx!=-1)
- printf("I find out,it's arr[%d]",idx);
- else
- printf("sorry,I can't do it");
- system("pause");
- }
折半查找
来源: http://www.bubuko.com/infodetail-2928103.html