java二分查找法_java算法-二分查找法

二分查找法的前提是数据必须是有序排列的数据,如果不是那将失去二分查找法的意义。

其中二分查找法有两种实现方式while、递归方法实现。下面我们来看下它的代码。

public class maxtest {

public static void main(String[] args) {

//###################二分查找法start###################//

int[] arrays = {113,16,24,22,218,25,23,8,13,6,215,123,218,113,14,222,28,213,4,2,17,5,12,117,15,122,18,26,214,212,117,216};

int temporary;

for (int j = 0; j < arrays.length-1; j++) {

for (int i = 0; i < arrays.length; i++) {

if (arrays.length-1 == i) {

break;

}else{

if (arrays[i] > arrays[i+1]) {

temporary = arrays[i];

arrays[i] = arrays[i+1];

arrays[i+1] = temporary;

}

}

}

}

for (int i = 0; i < arrays.length; i++) {

System.out.print(arrays[i]+" ");

}

System.out.println("\n调用递归方法结果:"+binarySearch(arrays,0,arrays.length-1,24));//递归方法调用

System.out.println("\n调用while方法结果:"+binarySearch(arrays,24));//while方法调用

//###################二分查找法start###################//

}

//二分查找法递归实现

public static int binarySearch(int[] arrays, int start, int end,int des){

int mid=(start+end)/2;

if (arrays[mid] == des) {

return mid;

}

if (start >= end) {

return -1;

}else if (arrays[mid] < des) {

return binarySearch(arrays, mid+1, end, des);

}else if(arrays[mid] > des){

return binarySearch(arrays, start, mid-1, des);

}

return -1;

}

//二分查找法while实现

public static int binarySearch(int[] arrays, int des){

int mid=arrays.length/2;

if (arrays[mid] == des) {

return des;

}

int low = 0;

int high = arrays.length-1;

while(low <= high) {

int middle = (low + high)/2;

if(des == arrays[middle]) {

return middle;

}else if(des

high = middle - 1;

}else {

low = middle + 1;

}

}

return -1;

}

结果如下:

2 4 5 6 8 12 13 14 15 16 17 18 22 23 24 25 26 28 113 113 117 117 122 123 212 213 214 215 216 218 218 222

调用递归方法结果:14

调用while方法结果:14

示意图

cd30b3cefa2de336c8185c93fb50e346.png

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值