2分排序 例子
二分排序 例子
题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置
for example:
题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置
for example:
int[] numbers = {92, 99,101,102,104,105,109,110,115,166,300,400,500, 1, 12, 13, 34, 35, 56, 57};
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; } }