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的下标值。
本文地址:https://blog.csdn.net/pluvialangel/article/details/112290675
下一篇: 后端开发都应该了解的登录漏洞