您的位置:首页 > 编程语言 > Java开发

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

2014-07-18 14:19 281 查看
二分法查找算法:是一种高效率线性表的查找算法,查找时,线性表中的值必须是有序的。

原理:

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+"次");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: