欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java无序数组排序后实现二分查找

程序员文章站 2022-03-10 17:33:13
Java递归方法实现二分查找法1.二分查找输入查找值,返回查找值的数组下标(查找的数组arr,数组的开头start,数组的结尾end,查找的值key)先判断输入的start(开头)是否比end(结尾)大,如果比end(结尾)大返回-1;2.在以上的大范围之下,最先的是对arr[mid](开头的值和结尾的值与中间数组的值)进行判断,如果和key(查找的值)的数组一样,返回mid(该中间数组的下标值),结束3.如果以上不成立,再判断arr[mid](中间数组的值)是不是小于需要查找的值,如果小于,则说明...

1.冒泡排序

对无序数组进行排序方法,参数为无序数组,return有序数组。
外部的for循环是对每一个值进行内部的for循环,
内部for循环是把最大值放到数组的最后一个

public static int[] mao(int[] arr){
		for(int j=0;j<arr.length;j++) {
		//
			  for(int i = 0;i<arr.length-1;i++) { 
				  if(arr[i]>arr[i+1]) {   
				      int da=arr[i];
					  int xiao=arr[i+1];
					  arr[i]=xiao;
			          arr[i+1]=da; 
			  }else { 
				  continue; 
				  } 
			   } 
			}
		return arr;
	}

2.递归方法实现二分查找法

1.二分查找输入查找值,返回查找值的数组下标(查找的数组arr,数组的开头start,数组的结尾end,查找的值key)
先判断输入的start(开头)是否比end(结尾)大,如果比end(结尾)大返回-1;
2.在以上的大范围之下,最先的是对arr[mid](开头的值和结尾的值与中间数组的值)进行判断,如果和key(查找的值)的数组一样,返回mid(该中间数组的下标值),结束
3.如果以上不成立,再判断arr[mid](中间数组的值)是不是小于需要查找的值,如果小于,则说明key(查找的值)在数组右边,那么给mid附值给一个新的开始值newstart,然后递归,start的值改变为newstart
4.如果以上也不成立,那么就只剩下arr[mid]>key,则说明key(查找的值)在数组左边,给mid附值给一个新的结束值newend,然后递归,end的值改变为newend

public int erfenchazhao(int[] arr,int start,int end,int key) {
		if(start>end) {
        //如果输入的数组开头比结尾大那么直接结束,返回负一
			return -1;
		}else {
			int mid = (end-start)/2;
            //新建中间值mid
			if(arr[mid]==key) 
            //中间值和查找值一样
            {
				return mid;
			}else if(arr[mid]<key)
            //中间值比查找值小,查找值在它右边,舍弃数组左边,中间值变成新的开始值,递归直到查找和中间相等返回中间值mid。
            {
				int newstart = mid;
				return erfenchazhao(arr,newstart,end,key);
			}else 
            //中间值比查找值大,查找值在它左边,舍弃数组右边,中间值变成新的结束值,递归直到查找和中间相等返回中间值mid。
            {
				int newend =mid;
				return erfenchazhao(arr,start,newend,key);
			}
		}
	}

3主方法测试

public static void main(String[] args) {
		int arr[]= {6,9,2,10,18,27,48,1,44};
		maopao m=new maopao();
		int houarr[]=m.mao(arr);
		
		  for(int i:houarr) System.out.print(i+" ");
		  //排序后,输出有序数组
		  System.out.println();
		  
		  Test1 test1=new Test1();
		 System.out.println(test1.erfenchazhao(houarr, 0, houarr.length-1, 10));
		 //输出查找值的下标值
	}

最终结果:查找10返回数组值为10的下标值。
Java无序数组排序后实现二分查找

本文地址:https://blog.csdn.net/pluvialangel/article/details/112290675