二分查找
原理:针对有序的数组,判断其中间值和key值的大小之差,然后进行二分
适用范围:有序的数组
复杂度:时间复杂度 O(log2n)
核心代码:
int middle = (top - tail) / 2+tail;
if (key < nums[middle]) {
top = middle - 1;
}
if (key > nums[middle]) {
tail = middle + 1;
}
else return middle;
示例代码:
import java.util.Arrays;
import java.util.Scanner;
public class RankTest {
public static void main(String[] args) {
int[] nums = new int[10];
for (int i = 0; i < nums.length; i++) {
nums[i] = i + 10;
}
System.out.println(Arrays.toString(nums));
System.out.println("N在第"+(rank(nums, 18)+1)+"位");
}
public static int rank(int[] nums, int key) {
int top = nums.length-1;
int tail = 0;
while (tail <= top) {
int middle = (top - tail) / 2+tail;
if (key < nums[middle]) {
top = middle - 1;
}
if (key > nums[middle]) {
tail = middle + 1;
}
if (key == nums[middle]) {
return middle;
}
}
return -1;
}
}