A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lvshen9 中级黑马   /  2017-2-22 11:15  /  1502 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

分享一个用二分法查找的例题


[AppleScript] 纯文本查看 复制代码
package array;


/*
 * 例题:
 *    给定一个有序的数组,如果往该数组中存储一个元素,并保证这个数组还是有序的,
 *    那么这个元素的存储的角标为如何获取。
 *    {13,15,19,28,33,45,78,106};
 * 
 */
public class HalfSearch {

	public static void main(String[] args) {
		int[] arr={13,15,19,28,33,45,78,106};
		int index=myBinarySearch(arr,44);
		System.out.println(index);
	}
	
	//Arrays里有binarySearch()方法用于二分查找,这里我自定了一个二分查找方法
	public static int myBinarySearch(int[] arr,int key ){
		int start,mid,end;
		start=0;
		end=arr.length-1;
		mid=(start+end)/2;
		
		while(start<=end){
			if(key>arr[mid])
				start=mid+1;
			else if(key<arr[mid]){
				end=mid-1;
			}
			else
				return mid;
			mid=(start+end)/2;

		}
		return mid+1;
	}
}

3 个回复

倒序浏览
[Java] 纯文本查看 复制代码
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Demo_test01 {
    public static void main(String[] args) {
        int key = 20;
        Integer[] arr =  {13,15,19,28,33,45,78,106};
        List<Integer> list  = Arrays.asList(arr);
        int binarySearch = Collections.binarySearch(list, key);
        int abs = Math.abs(binarySearch+1);
        System.out.printf("插入点角标为%d\n", abs);
    }
}
回复 使用道具 举报
香草芭芙 发表于 2017-2-22 14:35
[mw_shl_code=java,true]import java.util.Arrays;
import java.util.Collections;
import java.util.List; ...

用list集合可以扩容
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
66666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马