|——二分查找(前提是数组是有序的)
用三个指针来操作十足数组。(我的理解是,一打两断,只要一半。)
if(key>arr[mid])
min = mid +1; //要找的元素大于中间的元素,我就要mid右边的这一半。
if(key<arr[min])
max = mid -1; //要找的元素小于中间的元素,我就要mid左边的这一半。
mid = (min + max)>>1; //然后我更新中间值。(因为头指针和尾指针都改变了)
下面是具体的代码:
int halfSearch(int []arr,int key){
int min,max,mid;
min = 0;
max = arr.length-1;
while(min<=max){
mid = (min+max)>>1;
if(key>arr[mid]){
min = mid + 1;
}
else if(key<arr[mid]){
max = mid - 1;
}
else
return mid;
}
return -1; //这里返回-1意识是数组中不存在这个元素。告诉了调用者
}
|