浏览 1922 次
锁定老帖子 主题:基于有序数组二分法查找与线性查找性能区别
精华帖 (0) :: 良好帖 (0) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-13
最后修改:2009-03-21
package util; import java.util.Calendar; /** * 二分法查找与线性查找效率问题 * @author zhanglu * */ public class DichotomyAndLinearity { private int[] array; public DichotomyAndLinearity(int size){ array = new int[size]; } public void setArayValue(int index,int value){ array[index] = value; } public static void findlinearity(int[] array,int searchKey){ //arrayOrder(array); int i = 0; for( i= 0;i < array.length;i++){ if(array[i] == searchKey){ break; } } if(i == array.length){ System.out.println("不存在此项:"+searchKey); }else{ System.out.println("查找到的此项为:"+searchKey); } } /** * 二分法查找数组 * @param array * @param searchKey * @return */ public static String findDigit(int[] array,int searchKey){ //对数组先进行排序 //arrayOrder(array); int startDigit = 0;//开始下标为0 int endDigit = array.length - 1;//结束下标 int currentDigit; boolean flag = true; while(flag){ currentDigit = (startDigit+endDigit)/2; if(array[currentDigit] == searchKey){ return currentDigit+":"+searchKey; }else if(array[currentDigit] > searchKey){ endDigit = currentDigit - 1; }else{ startDigit = currentDigit + 1; } if(startDigit > endDigit){ flag = false; return "没有找到该数据:"+searchKey; } } return null; } public static void arrayOrder(int[] array){ for(int i = 0;i < array.length;i++){ for(int j = array.length - 1;j > 0;){ int temp; if(array[j] < array[j-1]){ temp = array[j-1]; array[j-1] = array[j]; array[j] = temp; } j--; } } } public static void main(String[] args) { DichotomyAndLinearity ac = new DichotomyAndLinearity(1000000); for(int i = 0;i < 1000000;i++){ ac.setArayValue(i, i); } int searchKey = 9999900; Calendar c1 = Calendar.getInstance(); long start01 = c1.getTime().getTime(); System.out.println(findDigit(ac.array,searchKey)); Calendar c2 = Calendar.getInstance(); long start02 = c2.getTime().getTime(); System.out.println("二分法查找速度:"+(start02-start01)); Calendar c3 = Calendar.getInstance(); long start03 = c3.getTime().getTime(); findlinearity(ac.array,searchKey); Calendar c4 = Calendar.getInstance(); long start04 = c4.getTime().getTime(); System.out.println("线性查找速度:"+(start04-start03)); } } 二分法性在效率上要强于线性查找 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |