二分排序 例子
题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置
for example:
public class Test{ /** * @param args */ public static void main(String[] args) { int[] numbers = {92, 99,101,102,104,105,109,110,115,166,300,400,500, 1, 12, 13, 34, 35, 56, 57};// System.out.println(Test.getPosition(numbers, 0));// System.out.println(Test.getPosition(numbers, 1));// System.out.println(Test.getPosition(numbers, 11));// System.out.println(Test.getPosition(numbers, 13));// System.out.println(Test.getPosition(numbers, 33));// System.out.println(Test.getPosition(numbers, 35));// System.out.println(Test.getPosition(numbers, 43));// System.out.println(Test.getPosition(numbers, 57));// System.out.println(Test.getPosition(numbers, 66));// System.out.println(Test.getPosition(numbers, 92));// System.out.println(Test.getPosition(numbers, 97));// System.out.println(Test.getPosition(numbers, 99));// System.out.println(Test.getPosition(numbers, 100)); System.out.println(Test.getPosition(numbers, 400)); } private static int getPosition(int[] numbers, int number) { int seperator = numbers[0]; int low = 0; int high = numbers.length - 1; while(low < high) { int mid = (low + high)/2; int midNumber = numbers[mid]; if(midNumber == number) { return mid; } if(number == seperator) { return low; } if(number > seperator) { if(number > midNumber&& midNumber >= seperator) { low = mid + 1; }else { high = mid - 1; } }else { if(number < midNumber&& midNumber < seperator) { high = mid - 1; }else { low = mid + 1; } } } if(high >= 0&& numbers[high] == number) { return high; } if(low < numbers.length&& numbers[low] == number) { return low; } return -1; } }