首页 / JAVA / java数据结构学习(一)之二分查找
java数据结构学习(一)之二分查找
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java数据结构学习(一)之二分查找,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2215字,纯文字阅读大概需要4分钟。
内容图文
![java数据结构学习(一)之二分查找](/upload/InfoBanner/zyjiaocheng/1241/1427f574241b42199fdcbe1a1450638a.jpg)
二分查找法与我们在孩童时期玩过的猜数的游戏一样,这个游戏里一个朋友会让你猜他正想的一个1至100的数,当你猜了一个数后,他会告诉你三种选择的一个:你猜的比她想的大,或小,或猜中了。为了能用最少的次数猜中,必须从50开始猜,如果她说你猜的太小,则推出那个数在51-100之间,所以下一次猜75((51+100)/2),如果她说有些大,那你就会在51-74之间才,下一次猜(51+74)/2=62。直到猜中她所给的数。
下面给出我们猜1-100的数,key为33的过程:
只需7次就可以猜中答案。下面我们给出二分查找的代码:
public class BinarySearch { private long [] a; private int nelems; public BinarySearch(int max){ a = newlong[max]; nelems = 0; } //返回数组的长度publicint size(){ return nelems; } /** * 二分查找算法关键代码 * @return*/publicint binarySearch(long searchKey){ int low = 0; int high = nelems-1; int curIn; while(true){ curIn = (low + high)/2;//划分范围的点if(a[curIn] == searchKey){//幸运判断,很幸运正好猜中return curIn; //返回要猜的数的位置 }elseif(low > high){//范围不存在return nelems;//没找到,返回数组的长度 }else{ if(searchKey > a[curIn]){ low = curIn + 1; }else{ high = curIn - 1; } } } } /** * * 在有序数组里面插入数 * @param args */publicvoid insertOrderArray(long value){ int i; for(i=0;i<nelems;i++){//遍历有序数组里面的元素与插入的数进行比较if(a[i] > value){//如果有序数组里面的某一个数比插入的数大,则结束遍历break; } } //插入的位置i,及i后面到的元素都要向右移动,腾出一个插入位置for(int k=nelems;k>i;k--){ a[k] = a[k-1];//a[10]=a[9],a[9] = a[8]插入点后面的都向右移动一个位置 } a[i] = value;//移动后腾出位置插入要插入的数 nelems++; } /** * 删除有序数组里面的数 */publicboolean delete(long key){ int i = binarySearch(key);//返回找到的数字数组下标if(i==nelems){ returnfalse; }else{ int j; for(j=i;j<nelems;j++){ a[j] = a[j+1];//向前移动 } nelems--;//数组长度减少returntrue; } } /** * 显示数组中的数 */publicvoid display(){ System.out.println("***************"); for(int j=0;j<nelems;j++){ System.out.print(a[j]+" "); System.out.print(""); } } publicstaticvoid main(String[] args){ int maxSize = 100; BinarySearch arr = new BinarySearch(maxSize); arr.insertOrderArray(30); arr.insertOrderArray(12); arr.insertOrderArray(15); arr.insertOrderArray(10); arr.insertOrderArray(90); arr.insertOrderArray(100); arr.insertOrderArray(101); arr.insertOrderArray(80); System.out.println("##############"); arr.display(); long keySearch = 102; if(arr.binarySearch(keySearch) != arr.size()){//上面返回值为没找到返回nelems长度 System.out.println("找到"+keySearch); }else{ System.out.println("没有找到"+keySearch); } arr.delete(30); arr.delete(100); arr.display(); } }
原文:http://www.cnblogs.com/200911/p/3896465.html
内容总结
以上是互联网集市为您收集整理的java数据结构学习(一)之二分查找全部内容,希望文章能够帮你解决java数据结构学习(一)之二分查找所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。