二分排序 例子

题目:一个有序的数组,里面是一万个整数。随机切分两部分,然后互换位置。求一个数的位置

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;
}







}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值