Java实现二分查找法

1 篇文章 0 订阅
1 篇文章 0 订阅

用java实现二分查找法

  1. 二分查找法又名折半查找法,一种快速从一个有序数组中找到某个元素位置的查找算法。每次取中间位置的值与待查关键字比较,如果中间位置的值比待查的值小,则将最小位置换为中间位置+1,如果中间位置的值比待查的值大,则将最大位置换为中间位置-1。直到找到为止,否则序列中没有待查的关键字
  2. 以下由两部分代码:一部分用代码编写了序列的排序,另一部分我是用Arrays数组中的sort实现快速排序,如果想了解排序的原理可以看第一个部分的代码。
//第一部分
import java.util.Scanner;

public class Text01 {
	Scanner s;
	static int[] array;
	int i;
	//输入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;
	//输入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]);
		
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值