二分搜索算法java代码 二分搜索算法流程

java泛型 二分查找

以下代码是关于对象的 二分查找 的例子,已经测试通过,执行即可。

创新互联建站是专业的大连网站建设公司,大连接单;提供成都做网站、成都网站设计、成都外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行大连网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

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写二分搜索,要求数组是由用户输入,再输入时,数组是无序的,要对数组进行从小到大的排序

二分查找又称折半查找,它是一种效率较高的查找方法。

【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

/**

* 二分查找又称折半查找,它是一种效率较高的查找方法。

【二分查找要求】:1.必须采用顺序存储结构 2.必须按关键字大小有序排列。

* @author Administrator

*

*/

public class BinarySearch {

public static void main(String[] args) {

int[] src = new int[] {1, 3, 5, 7, 8, 9};

System.out.println(binarySearch(src, 3));

System.out.println(binarySearch(src,3,0,src.length-1));

}

/**

* * 二分查找算法 * *

*

* @param srcArray

* 有序数组 *

* @param des

* 查找元素 *

* @return des的数组下标,没找到返回-1

*/

public static int binarySearch(int[] srcArray, int des){

int low = 0;

int high = srcArray.length-1;

while(low = high) {

int middle = (low + high)/2;

if(des == srcArray[middle]) {

return middle;

}else if(des srcArray[middle]) {

high = middle - 1;

}else {

low = middle + 1;

}

}

return -1;

}

/**

*二分查找特定整数在整型数组中的位置(递归)

*@paramdataset

*@paramdata

*@parambeginIndex

*@paramendIndex

*@returnindex

*/

public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){

int midIndex = (beginIndex+endIndex)/2;

if(data dataset[beginIndex]||datadataset[endIndex]||beginIndexendIndex){

return -1;

}

if(data dataset[midIndex]){

return binarySearch(dataset,data,beginIndex,midIndex-1);

}else if(datadataset[midIndex]){

return binarySearch(dataset,data,midIndex+1,endIndex);

}else {

return midIndex;

}

}

}

什么叫java中的二分查找法

1、算法概念。

二分查找算法也称为折半搜索、二分搜索,是一种在有序数组中查找某一特定元素的搜索算法。请注意这种算法是建立在有序数组基础上的。

2、算法思想。

①搜素过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束;

②如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。

③如果在某一步骤数组为空,则代表找不到。

这种搜索算法每一次比较都使搜索范围缩小一半。

3、实现思路。

①找出位于数组中间的值,并存放在一个变量中(为了下面的说明,变量暂时命名为temp);

②需要找到的key和temp进行比较;

③如果key值大于temp,则把数组中间位置作为下一次计算的起点;重复① ②。

④如果key值小于temp,则把数组中间位置作为下一次计算的终点;重复① ② ③。

⑤如果key值等于temp,则返回数组下标,完成查找。

4、实现代码。

/**

* description : 二分查找。

* @param array 需要查找的有序数组

* @param from 起始下标

* @param to 终止下标

* @param key 需要查找的关键字

* @return

*/

public static E extends ComparableE int binarySearch(E[] array, int from, int to, E key) throws Exception {

if (from  0 || to  0) {

throw new IllegalArgumentException("params from  length must larger than 0 .");

}

if (from = to) {

int middle = (from  1) + (to  1); // 右移即除2

E temp = array[middle];

if (temp.compareTo(key)  0) {

to = middle - 1;

} else if (temp.compareTo(key)  0) {

from = middle + 1;

} else {

return middle;

}

}

return binarySearch(array, from, to, key);

}

JAVA 二分查找?

,在将100/。;2/2与20比较.collections,取一段已经排好序的数据段,不过由于针对必须是已经排好序的数据段进行操作.util。直到找出20,集合)进行操作的方法大多都封装与java,有1-100数据,20,推荐冒泡法

java中对数据段(数组二分查找原理,java开源,此方法操作速度较快;类下边,也可以与我进行交流,qq,首先将100/2与20比较,算法相当之精辟,依此类推

如;100/,需要查找20,楼主有兴趣可以去看看他的源码,用需要查找的数据与该数据段的1/。,使用较少;2处的数据进行比较;2,先将该数据段从中间切割开

java 二分查找法

public class BinarySearch {

public static void main(String[] args) {

int[] a = { 2, 4, 6, 9 };

int key = 2;

BinarySearchM(a, key);

System.out.println("The key is in " + BinarySearchM(a, key));

}

public static int BinarySearchM(int[] list, int key) {

int low = 0;

int high = list.length - 1;

while (high = low) {

int mid = (low + high) / 2;

System.out.println(mid);

if (key  list[mid])//mid 改为 list[mid]

high = mid - 1;

else if (key == list[mid])

return mid;

else

low = mid + 1;

}

return -low - 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]; //每次把排序范围中的最后一个数作为排序时的参照数。

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(rightPtr0 theArray[--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类的对象arr for(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代码 二分搜索算法流程
浏览路径:http://scjbc.cn/article/hhscsd.html

其他资讯