二分查找
在一个有序数组中查找某个具体的数字n
int main() { int arr[]={1,2,3,4,5,6,7,8,9,10}; int k=7; int i=0; int sz=sizeof(arr)/sizeof(arr[0]); for (i=0;i<sz;i++) { if(arr[i]==k) { printf("找到啦,下标是%d\n",i); break; } } if(i==sz) { printf("Not Find\n"); } return 0; }
int main() { int arr[]={1,2,3,4,5,6,7,8,9,10}; int k=7; int i=0; int sz=sizeof(arr)/sizeof(arr[0]); int left =0; int right =sz-1; while(left<=right) { //int mid= (left+right)/2;//注意,left+right若大于int的值范围,可能会造成部分值的丢失 int mid = left+(right-left)/2 if (arr[mid]<k); { left=mid+1; } else if(arr[mid]>k) { right=mid-1; } else { printf("找到啦,下表是%d\n",mid); break; } } if(left>right) { printf("找不到了\n"); } return 0; }