算法----查找算法

二分查找算法

public class Demo {
	public static void main(String[] args){
		int[] num = {1,2,3,4};
		int index = 3;
		int start = 0;
		int end = num.length-1;
		boolean flag = false;
		if(index>=num[0]&&index<=num[end]){
			while(index<=num[end]){
				int middle = (start + end)/2;
				if(index==num[middle]){
					System.out.println(middle);
					flag = true;
					break;
				}
				if(index<num[middle]){
					end = middle-1;
				}
				if(index>num[middle]){
					start = middle+1;
				}
			}
		}
		if(flag==false){
			System.out.println("没有找到");
		}
		
	}
}

 

递归

简单的理解就是方法自己调用自己有结束的条件,判断结束的条件一定要在调用自己方法之前

注意:递归容易发生内存溢出,除非非用不可,一般不建议使用

 

java实现

第一种:

public class Demo {
    public static void main(String[] args){
    	jiecheng(10);
    }
    static int y = 1;
    public static void jiecheng(int x){
    	y = y*x;
    	if(x==1){
    		System.out.print(y);
    		return;
    	}
    	x--;
    	jiecheng(x);
    }
}

第二种

public class Demo {
    public static void main(String[] args){
    	int val = jiecheng(10);
    	System.out.println(val);
    }
    public static int jiecheng(int x){
    	if(x==1){
    		return 1;
    	}
    	return x*jiecheng(--x);  //这个地方只能用--x
//    	return x*jiecheng(x-1);  //或者
    }
}

  

 

取0~30不重复的10个整数

import java.util.Arrays;
import java.util.Random;
//目的:生成10个 不重复的0~30的整数
public class Demo {
	public static void main(String[] args){
		int[] num = new int[31];
		int len = num.length;
		for(int i=0;i<len;i++){
			num[i]=i;
		}
		int[] num2 = new int[10];
		Random r = new Random();
	
		for(int i=0;i<num2.length;i++){
			int index = r.nextInt(num.length-i);  //生成一个随机的索引,第二次循环-1,目的,不需要取到最后的一个索引,最后的索引对应的值已经取到了
			num2[i] = num[index];
			
			num[index] = num[index]^num[num.length-1-i]; //将该索引对应的值,放到num数组的最后,代表这个值已经取过了,
			num[num.length-1-i] = num[index]^num[num.length-1-i];
			num[index] = num[index]^num[num.length-1-i];
		}
		
		System.out.println(Arrays.toString(num2));
	}
}

  

 

posted @ 2019-04-04 14:04  小名的同学  阅读(120)  评论(0编辑  收藏  举报