题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置
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;
}
}