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+"次");
}
}
原理:
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+"次");
}
}
相关文章推荐
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- Java学习疑点(3)--解析二分法查找的原理以及其优缺点
- 算法(第四版)学习笔记之二分查找的递归与非递归java实现
- 二分法查找(折半查找)算法学习笔记
- java日常学习:直接查找法和二分法(折半法)查找数组元素
- Java二分查找算法学习笔记。
- java中选择排序,冒泡排序和二分法查找学习记录
- 二分法查找(折半查找)算法学习笔记
- JAVA基础day04 数组学习 排序和查找基本算法
- #数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA)
- Java学习资料-Java常用算法-二分查找算法
- [学习笔记]排序算法之 二分法查找
- 智渔课堂官方免费教程二十九:Java查找算法之二分法查找
- JAVA-二分法查找算法总结
- 查找算法之二分法查找(JAVA)
- 算法学习之查找(顺序、二分法、排序二叉树以及 Hash 表)
- 算法学习之二分法查找
- 算法代码实现之二分法查找,Java实现
- 学习回顾算法(二分法查找)
- 算法第4版(谢路云译)学习笔记(4) -- 二分法查找算法的分析解释