「java二分法」java二分法查找代码
今天给各位分享java二分法的知识,其中也会对java二分法查找代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 二分法 排序
- 2、怎么计算java二分法查找的比较次数
- 3、写一个java程序,用二分法把6插入到数组[1,2,5,7,8,9,13]
- 4、java二分法查找重复数字的下标?
- 5、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二分法查找代码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-29,除非注明,否则均为
原创文章,转载请注明出处。