查找算法-Java

二分查找

屏幕截图 2023-11-16 223828

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

public class d {
public static void main(String[] args) {
//二分查找
int []arr={7,23,79,81,103,127,131,147};
System.out.print("请输入你要查找的数字:");

int num=1311;
System.out.println(Findnum(arr,num));
}

public static int Findnum(int[] arr, int num) {
//定义左指针
int left= 0;
//定义右指针
int right=arr.length-1;

while (true){
if(left>right)return -1;
int a=(left+right)/2;
if(arr[a]>num) {
right=a-1;
}else if (num>arr[a]){
left=a+1;
}if(arr[a]==num){
return a;
}
}
}
}

分块查找

屏幕截图 2023-11-16 233550

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Day2.text1;

public class demol {
int max;
int left;
int right;

public demol() {
}

public demol(int max, int left, int right) {
this.max = max;
this.left = left;
this.right = right;
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package Day2.text1;

public class s {
public static void main(String[] args) {
int []arr={16,5,9,12,
21,18,32,23,
37,26,45,34,
50,48,61,52,
73,66};
//定义要查找的数
int num=48;
System.out.println(Findnum1(arr,num));
}

private static int Findnum1(int[] arr, int num) {
//创建对象
demol arr1=new demol(16,0,3);
demol arr2=new demol(32,4,7);
demol arr3=new demol(45,8,11);
demol arr4=new demol(61,12,15);
demol arr5=new demol(73,16,17);
//将所有对象装进数组
demol []aa={arr1,arr2,arr3,arr4,arr5};
//遍历查找num属于哪个索引
for (int i = 0; i < aa.length; i++) {
if (num<aa[i].max){
for (int j=aa[i].left;j<=aa[i].right;j++){
if(arr[j]==num)return j;
}
}
}
return -1;
}

}