算法----查找算法
二分查找算法
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)); } }