二分法和位运算的代码

/**
	 * 二分查找法,没有找到则返回-1,否则返回查找到的位置,从0开始
	 * @param a
	 * @param target
	 * @return
	 */
	public int binarySearch(int a[],int target){
		int low=0;
		int high=a.length-1;
		while(low<=high){
			int mid=(low+high)>>>1;//无符号右移一位,即相当于绝对值除2
			int midValue=a[mid];
			if(midValue<target){
				low=mid+1;
			}else if(midValue>target){
				high=mid-1;
			}else{
				return mid;
			}			
		}
		return -1;
	}
	
	/**
	 * 随机产生数组,数组长度不大于maxArraySize+1,数据不大于maxValue
	 * @param maxArraySize
	 * @param maxValue
	 * @return
	 */
	public int[] generateRandomSortedArray(int maxArraySize, int maxValue) { 
		Random rand=new Random();
		int arraySize = 1 + rand.nextInt(maxArraySize); //至少保证有1个数据
		int[] randomArray = new int[arraySize]; 
		for (int i = 0; i < arraySize; i++) { 
			randomArray[i] = rand.nextInt(maxValue); 
		} 
		Arrays.sort(randomArray); 
		return randomArray;
	}

测试代码
System.out.println("二分法查找结果:"+obj.binarySearch(a, 15));

你可能感兴趣的:(java)