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

浙公网安备 33010602011771号