java学习-算法2--二分法查找

二分法查找算法:是一种高效率线性表的查找算法,查找时,线性表中的值必须是有序的。

原理:

1)确定线性表的中间位置。

2)关键字和中间位置进行对比,如果关键字和中间位置相同,查找结束。

3)如果关键字大于中间位置,则关键字在 中间位置到结尾之间,重复上述查找步骤。

4)如果关键字小于中间位置,则关键字在开始到中间位置之间,重复上述查找步骤。


java实下如下:

package com.algorithm;


public class ErFenFa {


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] iArray={1,5,9,14,27,39,41,50,62,222,345,612,981,1207,8721};
int key = 612;
puTong(iArray,key);
ErFenFa(iArray,key);

}

/**
* 普通算法查找
*/
public static void  puTong(int[] array,int key){
int count = 0;//循环次数
int index = 0;
for(int i=0;i<array.length;i++){
count ++;
if(array[i]==key){
index = i+1;
break; 
}
}
System.out.println("普通算法查找:与关键字相同的是第"+index+"个元素,循环"+count+"次");

}

/**
* 二分法查找
*/
public static void  ErFenFa(int[] array,int key){
int count = 0;//循环次数
int index = 0;
int iFirst = 0;//第一个
int iLast = 0;//最后一个
int iCenter = 0;//中间
boolean b = true;

iLast = array.length;

while(b&&iFirst<=iLast){

count ++ ;

if((iFirst + iLast)%2 != 0){//确保是偶数
iLast--;
}
iCenter = (iFirst + iLast) / 2;
int tem = 15/2;
System.out.println("iFirst==="+iFirst);
System.out.println("iLast==="+iLast);
System.out.println("iCenter==="+iCenter);

int value =  array[iCenter-1];

if(value==key){//相等,结束循环
index = iCenter + 1;
b = false;
}else if(value>key){//大于key,继续查找
iFirst = 0;
iLast = iCenter;
b = true;
}else{//小于 继续
iFirst = iCenter;
iLast = array.length;
b = true;
}
}

System.out.println("二分法查找:与关键字相同的是第"+index+"个元素,循环"+count+"次");

}


}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值