算法导论学习2.3-5 二分查找的递归形式

原创 2012年03月28日 15:44:24
import java.util.*;

public class BinarySearch {
	public static void main(String[] args) {
		int[] data = {0,1,2,3};
		int key = 1;
		int[] num = {0};
		search(data, 0, data.length - 1, key ,num);
		
		System.out.println(key + " is in data[" + num[0] + "]");
	}
    static void search(int[] data, int i, int j, int key, int[] num) {
//	    int centre = (j - i + 1) / 2;
//		if (centre > 0) {
//			if (data[centre] > key) {
//				search(data, i, centre - 1, key, num);
//			}
//			else if(data[centre] < key) {
//				search(data,centre + 1, j, key, num);
//			}
//			else if(data[centre] == key) {
//				num = centre;
//			}
//		}	
    	
    	int centre = (j - i + 1) / 2;
    	int[] left = Arrays.copyOfRange(data, i, centre + 1);
    	int[] right = Arrays.copyOfRange(data, centre + 1, j + 1);
    	
    	if (centre > 0) {
    		if (left[left.length - 1] < key)
    			search(right, i, right.length - 1, key, num);
    		else if (left[left.length - 1] > key)
    			search(left, i, left.length - 1, key,num);
    		else if (left.length - 1 == key)
    			num[0] = left.length - 1;
    		else 
    			num[0] = -1;
    	}    	
    }
    
}


不会啊。。。这个递归不会写了,没办法返回 查找值 在数组中的位置。。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

算法导论学习2.3 分治法 (这个递归终于懂了。。)

import java.util.Arrays; public class MergeSort { public static void main(String[] args) { ...

第二章之“二分查找”(递归实现,练习2.3-5)

#include #include #include #define BUFFER_SIZE 10 void Merge(int *a,int p,int q,int r) { int n1...

算法导论二分查找算法

  • 2012年08月15日 22:24
  • 280KB
  • 下载

算法导论第2章(3) 二分查找 binary search

二分查找(分治法)。 二分查找也是一种分治法的实现,每一次查找将数据分为两个部分,问题规模都减小一半。这样查找的时间复杂度为logN。因为其实查找过程建立了一棵有N个节点的二叉树,查找次数是这棵树的...

算法导论学习笔记(3)-习题2.3-7-排序+二分

question(题意): Describe a O(n lg(n))-time algorithm that, given a set S of n integers and another ...

算法导论 10.4-5 O(n)时间非递归遍历二叉树

一、题目 写一个O(n)时间的非递归过程,输出给定的含n个结点的二叉树中每个结点的关键字。要求只能用除树本身以外的固定量的额外存储空间,而且在过程中不能修改该树,哪怕是暂时的 二、思考 采用类似中...

算法导论第二版习题10.4-5.非递归有父节点中序遍历二叉树

1.二叉树有父节点。2.非递归不用栈,不能修改树的结构(临时也不行)。o(n)时间复杂度,o(1)空间复杂度中序遍历二叉树做法:用一个last指针和一个cur指针。主要是查看是0.是否已经回到访问完的...

使用Java完成《算法导论》习题2.3-5

public class BinarySreach2_3_5 { /** * 在已排序的序列中进行二分查找 * @date 2015-6-13 * @author lemma ...

麻省理工《算法导论》学习笔记(二)渐近符号,递归及解法

2012-03-28 22:51 麻省理工《算法导论》学习笔记(二)渐近符号,递归及解法 今天,来学习一下程序中的渐近符号,递归及分析。 一、渐近符号: 1.,表示f(n)的复杂度最多与...

递归插入排序-《算法导论》学习笔记三

算法导论第二章结尾练习2.3-4提到将插入排序写递归版本,然后尝试写了个,本来写了就好了,但是调试的时候排序10w个数可以,排序100w个数就段错误,分析了一下,把结果放上来以后查看,先贴代码:#in...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法导论学习2.3-5 二分查找的递归形式
举报原因:
原因补充:

(最多只允许输入30个字)