二分查找算法java代码 java二分查找的简单例题

java二分查找二分查找算法java代码我大概看二分查找算法java代码了一下,找出二分查找算法java代码了二分查找算法java代码你2个重要的缺点.
第一,你用一个5个数的小数组挨个按你写的算法算一下,你会发现很多地方是a.length-1而非a.length,有的地方是==,而不是.
其中还有2个小地方.
if(counta.length/2)break;
可以写成while(reader.hasNextInt()counta.length/2).
3.else if(na[middle]) 可以写成 else.
第二,是最重要的问题.算法上面.
试想一下如果只有2个数.start是0,end是1,给出的数是a二分查找算法java代码的介绍就聊到这里吧 , 感谢你花时间阅读本站内容 , 更多关于java二分查找的简单例题、二分查找算法java代码的信息别忘了在本站进行查找喔 。
,用你的if(na[middle])start=middle;0.5取0,永远start,middle都是0.如果你说因此你用a.length而不是减1,那a就永远也取不到 。
怎么解决,加一个如果middle=(start end)/2后等于start且不为0的话,start取end.
用Java语言编写对整型数组进行二分查找的程序 。public class BinarySearchDemo {
public static void main(String[] args) {
int[] a = new int[]{1,5,7,9,11,18,23,48,69};
int point = new BinarySearchDemo().binarySearch(a, 23);
if(point == -1)
System.out.println("在数组中未查找到数23");
else
System.out.println("数字23是数组中第 "(point1)" 位数");
}
/**
* 二分法查找一个整数在整型数组中的位置
*
* 算法思路:首先得到数组a的最小值和最大值的下标 , 分别是:low和high,接着求出值位于数组中间那个数的下标middle
*然后再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等 , 则表示已查找到 , 如果numa[middle]
*则说明num位于a[low]和a[middle]之间 , 于是将a[middle - 1]设为较大值,继续求出此时对应的a[middle],
*再进行比较,其他情况可依次类推 。一直到low=high,如果此时还没有在数组a中查找到,则说明该数组a中没有值num,返回-1
*
* @param a 给定的整型数组
* @param num 待查找的数 num
*
* @return 返回整数num在数组a中的位置下标,如果未查找到则返回-1
* */
public int binarySearch(int[] a,int num){
int low = 0;
int high = a.length - 1;
while(low = high){
int middle = (lowhigh) / 2;
if(num == a[middle])
return middle;
else if(numa[middle])
high = middle - 1;
else
low = middle1;
}
return -1;
}
}
程序基本上就是这样了,其中注释中有详细的解释说明
JAVA二分查找//*******二分查找 , 都注释了,复制所有代码,保存成QuickSortApp.java*************//
class ArrayIns
{
private long theArray[];
private int nElems;
//--------------------
public ArrayIns(int max){//构造方法,初始化成员属性 。
theArray = new long[max];
nElems = 0;
}
//-----------------------
public void insert(long value){//insert方法用于给数组赋值,并用nElems记录数组元素的个数 。
theArray[nElems] = value;
nElems;
}
//----------------------------
public void display(){//display方法用于显示数组的所有元素到控制台 。
System.out.println("A= ");
for(int j=0;jnElems;j)
System.out.print(theArray[j] " ");
System.out.println("");
}
//------------------------------
public void quickSort(){//ArrayIns对象调用quickSort方法可以为其成员属性theArray数组中的元素排序(从小到大)
recQuickSort(0,nElems-1);//调用recQuickSort方法开始排序,初始范围从第一个到最后一个开始 。
}
//-------------------------------
private void recQuickSort(int left,int right){//recQuickSort方法进行数组元素的排序 。left,right表示排序的范围.
if(right-left = 0)
return; //如果right小于left,则第归返回 。此处是第归的出口 。
else {
long pivot = theArray[right];//每次把排序范围中的最后一个数作为排序时的参照数 。
【二分查找算法java代码 java二分查找的简单例题】int partition = partitionIt(left,right,pivot);//调用prititionIt方法,参数列表中指明排序的范围和参照数,并将方法的返回值赋给pritition变量(用来指明下一次排序时的范围 。)
//System.out.print(" " 1); //数字1代表第一次第归的调用 。
recQuickSort(left,partition-1);//第归调用本方法 , 排序右范围由partition-1来决定 。
//System.out.print(" " 2); //数字2代表第二次第归的调用 。
recQuickSort(partition 1,right);//第归调用本方法,排序左范围由partition-1来决定 。
}
}
//-----------------------------------
private int partitionIt(int left,int right,long pivot){ //partitionIt方法完成left和right范围内元素间排序的具体过程 。
int leftPtr = left-1;//leftPrt表示左标识位,从left-1开始 。
int rightPtr = right;//rightPrt表示右表识位,到right 。while(true){//永真循环 。
while(theArray[leftPtr]pivot);// 空循环 , 从leftPrt开始往rightPrt方向开始找一个比pivot大的数,用leftPtr记录元素的位置 。
while(rightPtr0theArray[--rightPtr]pivot);//空循环,从rightPrt往leftPrt方向开始找一个比pivot小的数,用rightPrt记录元素的位置,并且rightPtr0会保证不会数组越界 。
if(leftPtr = rightPtr)//永真循环的出口 , 表示本次排序结束 。
break;//跳出循环 。
else
swap(leftPtr,rightPtr);//将leftPtr和rightPtr所在位置的元素进行交换 。
}
swap(leftPtr,right);//调用swap方法 。
return leftPtr;//将leftPtr返回到本方法被调用的位置 。用来指明下一次排序时的范围.
}
//---------------------------------------------
private void swap(int dex1,int dex2){//swap方法用来将数组中的两个元素进行交换,dex1和dex2分别表示两个数组元素的位置 。
long temp = theArray[dex1];//temp变量作为两个数组元素交换时的临时中转变量 。
theArray[dex1] = theArray[dex2];
theArray[dex2] = temp;
}
}//////////////////////////////////////////////////////////////////////////////////////class QuickSortApp
{
public static void main(String[] args)
{
int maxSize = 10;//定义变量maxSize , 并赋初值10.
ArrayIns arr;
arr = new ArrayIns(maxSize);//创建ArrayIns类的对象arrfor(int j=0;jmaxSize;j){
long n = (int)(java.lang.Math.random()*99);//产生随机数 。
arr.insert(n); //用insert方法为arr中的成员数组变量赋值 。
}
arr.display();//用display方法显示arr中成员变量数组中的所有元素 。
arr.quickSort();//用quickSort方法为arr成员变量数组中的元素按从小到大排序 。
arr.display();//显示 。
}
}
java泛型 二分查找以下代码是关于对象二分查找算法java代码的 二分查找 的例子二分查找算法java代码,已经测试通过二分查找算法java代码,执行即可 。
Student 是基本比较对象类
Dichotomy 是二分法执行类
Test 是测试类
package com.dichotomy;
public class Student implements ComparableStudent {
private int id;
private String name;
private String idCard;
private String sex;
private String mobile;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getIdCard() {
return idCard;
}
public void setIdCard(String idCard) {
this.idCard = idCard;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
/**
* 排序控制
* @param o1 Student
* @param o2 Student
* @return int 返回 -1 向前移动, 1 向后移动, 0 不移动
* 这个方法需要自己进行调整,排序比较和二分查找时均使用此方法进行位置调整
* 比较时使用的key自己可以进行修改 , 不过要保证唯一性,否则查询出来的值会不准确
*/
public int compareTo(Student o) {
//不同的执行次序决定排序和查找次序不同,可以同下面的调换一下
if(this.getId()o.getId()){
return -1;
} else if(this.getId() == o.getId()){
;
} else {
return 1;
}
//不同的执行次序决定排序和查找次序不同
int c = this.getIdCard().compareTo(o.getIdCard());
if(c != 0){
return c;
}
//不同的执行次序决定排序和查找次序不同
int n = this.getName().compareTo(o.getName());
if(n != 0){
return n;
}
return 0;
}
public String toString(){
StringBuffer sb = new StringBuffer();
sb.append(this.getId()).append("\t");
sb.append(this.getName()).append("\t");
sb.append(this.getIdCard()).append("\t");
sb.append(this.getMobile()).append("\t");
sb.append(this.getSex());
return sb.toString();
}
}
求一个java的二分查找的程序代码//你那程序太难改了 , 每个方法都单职责啊
public class Test6 {
//二分查找
public static int findPos(int[] a,int key) {
int start=0;
int end=a.length-1;
int temp=0;
while(startend){
int mid=(start end)/2;
if(keya[mid]){
start=mid 1;
temp=start;
}else if(keya[mid]){
end=mid-1;
temp=end;
}else {
return mid;
}
}
return temp;
}
public static void main(String[] args) {
int[]array={1,4,6,7,10,11,23,78};
System.out.println(findPos(array, 0));
}
}
二分查找算法java代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java二分查找的简单例题、二分查找算法java代码的信息别忘了在本站进行查找喔 。

    推荐阅读