二分查找的效率比较高,时间复杂度为o(log(n)),它接受一个整数键和一个已经有序的数组作为参数,如果该键存在于数组中就返回它的索引,否则返回-1,用一个while循环判断low与high的大小,当low>high的时候跳出循环,否则用mid作为中间索引去查找key,如果key<nums[mid],那么让high变为mid-1,若key>nums[mid],low变为mid+1,如果key=nums[mid],那么说明找到了key,返回其索引mid,java程序如下:
import java.util.Arrays;
public class BinarySearch {
public static int rank(int[] nums, int key) {
// 这里的数组nums必须是有序数组
int low = 0;
int high = nums.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (key < nums[mid]) {
high = mid - 1;
} else if (key > nums[mid]) {
low = mid + 1;
} else
return mid;
}
return -1;
}
public static void main(String[] args) {
int[] nums = { 1, 6, 3, 4, 8, 2 };
int key = 2;
Arrays.sort(nums);
int res = rank(nums, key);
System.out.println(res);
}
}