您的位置:

java二分法,java二分法排序代码

本文目录一览:

java程序 二分法查找一个数

public

class

Lookup

{

/**

*

@param

args

*/

public

static

void

main(String[]

args)

{

//

TODO

Auto-generated

method

stub

/**

*

二分法查找

*/

int

a[]={23,45,98,100,110,120,140};

int

search=120;//记录要查找的元素

int

lower=0;//记录第一个元素

int

temp=a.length-1

;

int

index=-1;

while(lower=temp){

index

=

(lower+temp)/2;//记录中间元素,用两边之和除2.

int

currentValue=a[index];

if(currentValue==search){//如果得到的数与要查找的数相等则break退出;

break;

}else

if(currentValuesearch){//如果得到的数要小于查找的数、就用下标加1;否则减一

lower=index+1;

}else{

temp

=

index-1;

}

}

if(lower=temp){

System.out.println(search+"在数组中第:"+(index+1)+"位");

}else{

System.out.println("里面没有这个元素");

}

}

}

怎么计算java二分法查找的比较次数

您好,我来为您解答:

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。 基本思想:假设数据是按升序排序的,对于给定值 x,从序列的中间位置开始比较,如果当前位置值等于 x,则查找成功;若 x 小于当前位置值,则在数列的前半段中查找;若 x 大于当前位置值则在数列的后半段中继续查找,直到找到为止。

希望我的回答对你有帮助。

java 二分法排序

首先取第一个12,其它元素比12小的放左边,比12大的放右边,这样2,11,12,56,77,34

原来的数组就变成了两个部分2,11,12和56,77,34

两个方法按照上面的步骤递归排,比如第二部分56,77,34

取第二部分的第一个56,比它小的放左边,比它大的放右边,这样34,56,77

这样1个数组,分成2各部分,再分成4各部分,一直下去,直到排完

要用到递归,二分法就是这样

java二分法查找重复数字的下标?

package pers.ly.javase.algorithm;import java.util.Arrays;/**

* 二分法查找

* @author: Lu Yang

* @date: 2019-01-23 10:50:37

*

*/public class BinarySearch {

public static void main(String[] args) {

Integer[] arr = {10,50,30,40,10,80,90,70,60,40,100,10};

// 数组排序 - 二分法必要条件

Arrays.sort(arr);

System.out.println(Arrays.toString(arr));

System.out.println(binarySearch(arr,50));

}

/**

*

* @author: Lu Yang

* @date: 2019-01-23 11:44:01

* @param arr 数组

* @param value 数组元素值

* @return

*

*/

public static Integer binarySearch(Integer[] arr, Integer value) {

// 定义数组开始位置

Integer start = 0;

// 定义数组结束位置(arr.length是计算数组从1开始的总长度,arr.length-1计算数组从0开始的总长度)

Integer end = arr.length - 1;

// 开始位置 = 结束位置

while (start = end) {

// 定义数组的中心位置(开始位置+结束位置)/2

Integer mid = (start + end) / 2;

// 判断数组mid位置值(当前数据中间位置值)是否小于传过来的值

if (arr[mid] value)

// 如果小于传过来的值,数组开始位置则定义中间位置下标+1

start = mid + 1;

// 判断数组mid位置值(当前数据中间位置值)是否大于传过来的值

if (arr[mid] value)

// 如果大于传过来的值,数组结束位置则定义中间位置下标-1

end = mid - 1;

if (arr[mid] == value)

return mid;

}

return -1;

}}