java数组和二分法查找

算法之一的二分法查找中心思想就是对半分,前提是数据已经进行排序了!

代码

public class Dublearraytest {

	 public static void main(String [] agrs ) {
		
		 //创建新的数组
		  int [] arr= {  10,20,52,48,78,98,45,4655,885  };
		  int [] a= {  10,20,52,78,98,4655 ,98888 };
		  //binarysolect(a,98);
		  select(a,98);
		  binarysolect(arr,98);
	 }
	 //二分法查找
	 public static void binarysolect( int [] array,int a ) {//a时查找元素的值
		 //判断是否需要排序
		 for(int i=0;i<array.length;i++)
		 {
			 int min=array[0];
			 if(array[i]>min)
			 {
				
				 selectsort( array);
				// Arrays.sort(array);//排序工具包
				 break;//结束排序但是程序不会结束
				 //return;整个程序结束
			 }
		 }
		
		 //开始下标
		 int begin=0;
		 //结束下标
		int end= array.length-1;
	
		//查询
		while(begin <=end)
		 {
			//开始查找下标
			int mid =(begin+end)/2;
			if (array[mid] == a) {
				System.out.println("查找元素在数组第" + mid + "个位置");
				return;
			} else if (array[mid] < a) {

				begin = mid + 1;
			} else {
				end = mid - 1;
			}
		}
		 System.out.println("没有要查找的元素");
	 }
	 //一个一个找
	 public static void select(int [] array ,int a) {
		 for(int i=0;i<array.length;i++)
		 {
			 if(array[i]==a)
			 {
				 System.out.println(i);
				 return ;//结束
			 }
		 }
			 System.out.println("没有此元素");
		
	 }
	//选择排序 
	public static void selectsort(int [] array) {
		for (int i= 0;i<array.length-1;i++) {
			int min =i;
			for(int j=i+1;j<array.length;j++) {
				if(array[min]>array[j]) {
					min=j;
				}
			}
			if(min!=i) {
				int t= array[min];
				array[min]=array[i];
				array[i]=t;
			}
		}
		
		
		
	}
	 
}

运行结果

 上面代码中排序算法是选择排序,友友们可以使用Arrays包中的sort()方法,下面的练习代码有友友们可以试着了解一下

package Absttact;
import java.util.Arrays;
import java.util.Scanner;
//Array工具类
public class Arraystes {

	public static void main(String [] agrs) {
		
		int [] a = {1,2,5,18,96,177};
		 Doubleselect(a);
	}
	//二分法查找
	public static void Doubleselect(int [] array) {
		
		//排序
		for(int i=0;i<array.length;i++) {
			int min =array[0];
			if(min<array[i]) {
				Arrays.sort(array);
				break;
			}
		}
		//查找
	 int begin=0;
	 int end= array.length-1;
	 Scanner sc= new Scanner(System.in);
	 System.out.println("输入查找的元素");
	 int a=sc.nextInt();
	 while (begin<=end) {
		 int mid =(begin+end)/2;
		 if(array[mid]==a)
		 {
			 System.out.println("查找元素在数组第" + mid + "个位置");
				return;
		 }
		 else if(array[mid]<a) {
			 begin=mid +1;
		 }
		 else {
			 begin=end-1;
		 }
	 }
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值