用java实现二分查找法
- 二分查找法又名折半查找法,一种快速从一个有序数组中找到某个元素位置的查找算法。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查的值小,则将最小位置换为中间位置+1,如果中间位置的值比待查的值大,则将最大位置换为中间位置-1。直到找到为止,否则序列中没有待查的关键字
- 以下由两部分代码:一部分用代码编写了序列的排序,另一部分我是用Arrays数组中的sort实现快速排序,如果想了解排序的原理可以看第一个部分的代码。
import java.util.Scanner;
public class Text01 {
Scanner s;
static int[] array;
int i;
public Text01(){
s=new Scanner(System.in);
System.out.println("请输入待排排的个数:");
i=s.nextInt();
}
public void compare(){
int temp;
array=new int[i];
System.out.println("请输入排序数:");
for(int j=0;j<i;j++){
array[j]=s.nextInt();
}
for(int k=0;k<i;k++){
for(int p=k+1;p<i;p++){
if(array[k]>array[p]){
temp=array[k];
array[k]=array[p];
array[p]=temp;
}
}
}
}
public int fond(){
compare();
System.out.println("请输入查找的关键值:");
int key=s.nextInt();
int min=0;
int max=array.length-1;
while(min<=max){
int mid=(min+max)/2;
if(array[mid]<key){
min=mid+1;
}
else if(array[mid]>key){
max=mid-1;
}
else{
return mid;
}
}
return 0;
}
public static void main(String[] arga){
Text01 t=new Text01();
int n=t.fond();
System.out.println("在"+n+"的位置找到关键值"+array[n]);
}
}
import java.util.Arrays;
import java.util.Scanner;
public class Text01 {
Scanner s;
static int[] array;
int i;
public Text01(){
s=new Scanner(System.in);
System.out.println("请输入待排排的个数:");
i=s.nextInt();
}
public int compare(){
int temp;
array=new int[i];
System.out.println("请输入排序数:");
for(int j=0;j<i;j++){
array[j]=s.nextInt();
}
Arrays.sort(array);
System.out.println("请输入查找的关键值:");
int key=s.nextInt();
return key;
}
public int fond(){
int fKey=compare();
int min=0;
int max=array.length-1;
while(min<=max){
int mid=(min+max)/2;
if(array[mid]<fKey){
min=mid+1;
}
else if(array[mid]>fKey){
max=mid-1;
}
else{
return mid;
}
}
return 0;
}
public static void main(String[] arga){
Text01 t=new Text01();
int value=t.fond();
System.out.println("在第"+value+"的位置找到关键值"+array[value]);
}
}