读书人

2分排序 例子

发布时间: 2012-10-15 09:45:25 作者: rapoo

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

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

读书人网 >编程

热点推荐