「java二分法」java二分法查找代码

博主:adminadmin 2022-11-29 01:12:07 44

今天给各位分享java二分法的知识,其中也会对java二分法查找代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 二分法 排序

二分排序就是用先用二分查找法来查某一个元素,然后再用别的排序算法来进行排序。

package insert;

public class InsArrayApp {

public static void main(String[] args) {

int size = 100;

InsArray arr = new InsArray(size);

arr.insert(10);

arr.insert(9);

arr.insert(8);

arr.insert(7);

arr.insert(6);

arr.insert(10);

arr.insert(9);

arr.insert(8);

arr.insert(5);

arr.insert(4);

arr.insert(3);

arr.insert(2);

arr.insert(1);

arr.display();

// arr.insertSort();

// arr.display();

// System.out.println(arr.median());

// arr.noDups();

arr.noDups2();

arr.display();

}

}

class InsArray {

private int[] a;

private int nElems;

public InsArray(int size) {

a = new int[size];

nElems = 0;

}

public void insert(int value) {

a[nElems] = value;

nElems++;

}

public void display() {

for (int i = 0; i nElems; i++) {

System.out.print(a[i] + " ");

}

System.out.println();

}

public void insertSort() {

int out, in;

int copy = 0;

int compare = 0;

/* for(out = 1;outnElems;out++){

int tmp = a[out];

in = out;

while(in0a[in-1]=tmp){

a[in] = a[in-1];

--in;

}

a[in] = tmp;

}*/

for(out = 1;outnElems;out++){

int tmp = a[out];

in = out;

while(in0){

if(a[in-1]=tmp){

a[in] = a[in-1];

--in;

++copy;

++compare;}

else{

break;

}

}

++compare;

a[in] = tmp;

}

System.out.println("copy:" + copy + "compare:" + compare);

}

public int median(){

insertSort();

int m = nElems/2;

return a[m];

}

public void noDups(){

insertSort();

/*

InsArray tmp = new InsArray(nElems);

for(int i = 0;inElems;i++){

for(int j = i+1;jnElems;j++)

if(a[i] == a[j]){

a[j] = -1;

}

if(a[i]!=-1)

tmp.insert(a[i]);

}

*/

InsArray tmp = new InsArray(nElems);

int i;

for(int j = 0;jthis.nElems;j++){

/*if(tmp.nElems==tmp.find(this.a[j])) //binary find

tmp.insert(this.a[j]);

else

continue;*/

for( i = 0; i tmp.nElems; i++) { // for each element

if(tmp.a[i]==this.a[j]) // found searchKey?

break;

}

if(i==tmp.nElems) // no

tmp.insert(this.a[j]);

}

this.a = tmp.a;

this.nElems = tmp.nElems;

}

public int find(long searchKey) {

int lowerBound = 0;

int upperBound = nElems-1;

int curIn;

while(true) {

curIn = (lowerBound + upperBound)/2;

if(a[curIn]==searchKey)

return curIn;

else if(lowerBoundupperBound)

return nElems;

else {

if(a[curIn]searchKey)

upperBound = curIn-1;

else

lowerBound = curIn+1;

}

}

}

public void noDups2(){

insertSort();

for(int i = 0;inElems;i++){

for(int j = i+1;jnElems;j++)

if(a[i] == a[j]){

a[j] = -1;

}

}

display();

int index = 0;

for(int i=0;inElems;i++){

if(a[i]!=-1){

index++;

}else{

for(int j=index+1;jnElems;j++){

if(a[j]!=-1){

a[index] = a[j];

a[j]=-1;

index++;

break;

}

}

}

}

nElems = index;

}

}

上面的代码,是我以前敲的,有个find()方法是二分查找,然后再用插入排序去进行排序。

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

您好,我来为您解答:

算法:当数据量很大适宜采用该方法。采用二分法查找时,数据需是有序不重复的。

基本思想:假设数据是按升序排序的,对于给定值

x,从序列的中间位置开始比较,如果当前位置值等于

x,则查找成功;若

x

小于当前位置值,则在数列的前半段中查找;若

x

大于当前位置值则在数列的后半段中继续查找,直到找到为止。

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

写一个java程序,用二分法把6插入到数组[1,2,5,7,8,9,13]

public static void insertSort(int[] data, int num) {

int left, right;

int middle, j;

// 准备

left = 0;

right = data.length - 2;

// 二分法查找插入位置

while (right = left) {

// 指向已排序好的中间位置

middle = (left + right) / 2;

if (num data[middle])

right = middle - 1;// 插入的元素在右区间

else

left = middle + 1; // 插入的元素在左区间

}

// 后移排序码大于R[i]的记录

for (j = data.length - 2; j = left; j--) {

data[j + 1] = data[j];

}

// 插入

data[left] = num;

}

public static void main(String[] args) {

int[] data1 = { 1, 2, 5, 7, 8, 9, 13, 0 };// 预留一位给需要排序插入的使用

//insertSort(data1, 0);

insertSort(data1, 6);

//insertSort(data1, 14);

for (int i = 0; i data1.length; i++) {

System.out.println(data1[i]);

}

}

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;

}}

Java二分法

首先得告诉你,二分法的前提是必须是顺序方式存储,而且必须是排好序了的。比如要从100个数中查找某一个数,前提是这一百个数是排好序(这里假如从小到大)的,然后找到最中间的数,若最中间的数(这里是第50个)比你要找的这个数大那你只需要在1到49个数里找,然后再取最中间的数,再判断,如此往复下去,最多次数,你算算看,

关于java二分法和java二分法查找代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-29,除非注明,否则均为首码项目网原创文章,转载请注明出处。