算法学习(1)二分查找法java版

5 篇文章 0 订阅
3 篇文章 0 订阅

日程表里,都安排了算法学习时间,重要度仅次于英语的学习。但总是在赶项目的时候,就顾不上了。

以至于,把重要的工作往后拖拖拖。要事第一!

算法的学习,以前学过一些,虽然编程中用的不多,但在训练思维和编程功力上是有帮助的。这轮学习,

基本按照:1.复习常见算法及习题;

2.根据《算法导论》,系统学习。


本篇介绍二分查找法:

在一个有序数列中,查找一个数

</pre><pre name="code" class="java">/**
	 * 在一个有序数列中,查找一个数,有就返回脚标,没有返回-1。
	 * 方法一,循环
	 * @param list 一个有序数列中
	 * @param num 待查的数
	 * @return 有就返回脚标,没有返回-1
	 */
	public int searchFor(int[] list,int num) {
		if(list==null||list.length<1){
			return -1;
		}else{
			int mid=list.length>>2;
			int start=0;
			int end=list.length-1;
			while(start<=end){
				mid=(end+start)>>2;
				if(num==list[mid]){
					return mid;
				}else if(num>list[mid]){
					start=mid+1;
				}else{
					end=mid-1;
				}
			}
			return -1;
		}
	}
	/**
	 * 方法二:递归查找
	 * @param list
	 * @param num
	 * @param start
	 * @param end
	 * @return
	 */
	public int searchRe(int[] list,int num,int start,int end) {
		if(list==null||list.length<1||start>end){//注意,如果end是list.length,这里只需判断start=end就可以
			return -1;
		}else{
			int mid=(start+end)/2;
			if(num==list[mid]){
				return mid;
			}else if(num>list[mid]){
				return searchRe(list,num,mid+1,end);
			}else{
				return searchRe(list,num,start,mid-1);
			}
		}

	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int[] arry=new int[10000];
		for (int i = 0; i < 10000; i++) {
			arry[i]=i;
		}
		int t=776;
//		int index=new BinarySearch().searchFor(arry, t);
		int index=new BinarySearch().searchRe(arry, t,0,arry.length-1);
		System.out.println(index);
	}


----------------结果--------------------------

776

这个算法适合有序表的频繁查询,不适合增删,算法要注意处理边界值。



参考资料:http://baike.baidu.com/view/610605.htm?fr=aladdin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值