java二分源代码 java 二分

用Java语言编写对整型数组进行二分查找的程序。

public class BinarySearchDemo {

成都创新互联公司是一家集策划、设计、技术开发一体的专业的建站公司,技术团队十多年来致力于为客户提供企业网站定制,成都做手机网站。经过多年发展,公司技术团队,先后服务了1000多家客户,包括各类中小企业、上市公司、高校、政府。公司在过去十多年的资源积累,追求并一直坚持,为客户打造更有价值的互联网平台。

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是数组中第 " + (point + 1) + " 位数");

}

/**

* 二分法查找一个整数在整型数组中的位置

*

* 算法思路:首先得到数组a的最小值和最大值的下标,分别是:low和high,接着求出值位于数组中间那个数的下标middle

* 然后再将这个middle对应的数组中的数和待查找的数num进行比较,如果相等,则表示已查找到,如果num a[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 = (low + high) / 2;

if(num == a[middle])

return middle;

else if(num a[middle])

high = middle - 1;

else

low = middle + 1;

}

return -1;

}

}

程序基本上就是这样了,其中注释中有详细的解释说明

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 二分查找疑惑

很明显你不能把middle的赋值语句设在循环语句的外面,在二分查找算法中,在执行一次查找后,middle是需要被重新赋值的,你所说的可以正确查找9只是一种巧合而已,因为第一次循环就能把9查出来。如果把那条语句放在你注释的位置,下面的low=high永远成立,肯定是死循环。

麻烦高手写2分查找JAVA代码

花了我将近一个小时的时间摆弄,你还不舍得给分

第一个类

/**************************************************************************

* 该类为启动类,运行该类,将跳出输入数组对话框,输入的数字之间用逗号隔开,若输入

* 的不是数字有可能出现异常,请自己处理。输入的数字最大个数为100,也可以修改处理

* 更大个数的数组。

**************************************************************************/

package terry.test;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

import java.util.EventListener;

import java.util.StringTokenizer;

public class InputData extends JFrame implements ActionListener

{

Container con=this.getContentPane();

JButton button1=new JButton("确定");

JButton button2=new JButton("取消");

JLabel label=new JLabel("请输入数组:");

JTextField text=new JTextField("数字之间用逗号隔开");

Panel panel1=new Panel();

Panel panel2=new Panel();

@SuppressWarnings("deprecation")

public InputData()

{

super("输入有序数据对话框");

con.setLayout(new GridLayout(2,1));

panel1.add(label);

panel1.add(text);

con.add(panel1);

button1.addActionListener(this);

panel2.add(button1);

button2.addActionListener(this);

panel2.add(button2);

con.add(panel2);

this.setSize(300,200);

this.show();

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==button1)

{

String dataString=text.getText();//截取写入的数组,现在还是一个字符串

ordArray arr=new ordArray(100);//生成排序类的实例;

//以下为处理整个字符串,转化为整型数组。

if(dataString!=null)

{

StringTokenizer s=new StringTokenizer(dataString,",");

while(s.hasMoreTokens())

{

int temp=0;

try

{

temp=(new Integer(s.nextToken())).intValue();

}catch(NumberFormatException ex)

{

JOptionPane.showMessageDialog(null, "在数组中,请输入整数值!");

}

arr.insert(temp);

}

}

this.dispose();

new InputSearchApp(arr);

}

}

public static void main(String args[])

{

new InputData();

}

}

第二个类

/**************************************************

* InputData实例向该类的实例传递了orderArray参数变量*

* *

*/

package terry.test;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.Panel;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

public class InputSearchApp extends JFrame implements ActionListener{

Container con=this.getContentPane();

JButton button1=new JButton("确定");

JButton button2=new JButton("取消");

JLabel label=new JLabel("请输入要查找的数值:");

JTextField text=new JTextField(10);

ordArray arr=null;

Panel panel1=new Panel();

Panel panel2=new Panel();

public InputSearchApp(ordArray testArray)

{

super("输入有序数据对话框");

arr=testArray;

con.setLayout(new GridLayout(2,1));

panel1.add(label);

panel1.add(text);

con.add(panel1);

button1.addActionListener(this);

panel2.add(button1);

button2.addActionListener(this);

panel2.add(button2);

con.add(panel2);

this.setSize(200,200);

this.show();

}

public void actionPerformed(ActionEvent e)

{

if(e.getSource()==button1)

{

String dataString=text.getText();

int searchKey= (new Integer(dataString)).intValue();

boolean success=arr.find(searchKey);

if(success)

{

this.dispose();

JOptionPane.showMessageDialog(null, ("查找到数据"+searchKey));

}

else

{

JOptionPane.showMessageDialog(null, ("没有查找到数据"+searchKey));

}

}

}

}

第三个类2分查找类

package terry.test;

public class ordArray {

private int[]a;

private int nElems;

public ordArray(int max)

{

a=new int[max];

nElems=0;

}

public int size()

{

return nElems;

}

public boolean find(int searchKey)

{

return recFind(searchKey,0,nElems-1);

}

private boolean recFind(int searchKey,int lowerBound,int upperBound)

{

int curIn,theindex;

//boolean flag=false;

curIn=(lowerBound+upperBound)/2;

if(a[curIn]==searchKey)

theindex=curIn;

else if(lowerBoundupperBound)

theindex=nElems;

else

{

if(a[curIn]searchKey)

return recFind(searchKey,lowerBound,curIn-1);

else

return recFind(searchKey,curIn+1,upperBound);

}

if(theindex!=this.size())

return true;

else

return false;

}

public void insert(int value)

{

int j;

for(j=0;jnElems;j++)

if(a[j]value)

break;

for(int k=nElems;kj;k--)

a[k]=a[k-1];

a[j]=value;

nElems++;

}

}

求一个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 二分
转载来于:http://pwwzsj.com/article/doosdeg.html