有序数组下二分查找的find的方法

本文介绍了使用有序数组进行二分查找的实现方法,并演示了插入、查找和删除操作。此外,还展示了如何通过对象数组存储和管理复杂数据类型,包括插入、查找及删除对象实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、有序数组下二分查找的find的方法

import java.util.Random;
class OrdApp{
    private long[] a;
    private int nElems;

    public OrdApp(int Max) {
        a = new long[Max];
        nElems = 0;

    }
//返回数组当前的数据项的个数   
 public int size () {
        return nElems;
    }
        //二分查找的find()方法
    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(lowerBound>upperBound)
                return nElems;
            else
            {
                if (a[curIn]<searchKey)
                    lowerBound=curIn+1;
                else
                    upperBound=curIn-1;
            }

            }
        }

        public void insert(long value){
         int j;
         for(j=0;j<nElems;j++)
             if(a[j]>value)
                 break;
         for(int k=nElems;k>j;k--)
             a[k]=a[k-1];
         a[j]=value;
         nElems++;
        }

        public boolean delete(long value){
            int j;
            for(j=0;j<nElems;j++)
                if(value==a[j])
                    break;
            if(j==nElems)
                return false;
            else {
                for (int k=j;k<nElems;k++)
                    a[k]=a[k+1];
                nElems--;
                return true;
            }
        }
    public void display(){
        for(int j=0;j<nElems;j++)
            System.out.println(a[j]+"  ");
        System.out.println("");
    }
}

public class OrderArray {
    public static void main(String[] args) {
        int maxSize = 100;
        OrdApp arr;
        Random r = new Random();
        arr = new OrdApp(maxSize);
        int i;
        for (i = 0; i < 10; i++) {

            int temp = r.nextInt(18);
            arr.insert(temp);
        }
        arr.display();

        int searchKey = r.nextInt(18);
        System.out.println("需要查找的数是::" + searchKey);
        if (arr.find(searchKey) != arr.size())
            System.out.println("Find " + searchKey);
        else
            System.out.println("can't Find " + searchKey);

        arr.delete(12);
        arr.delete(55);

        arr.display();
    }
}

 二、存储对象,即所要存储的对象是多个元素的集合,用数组肯定不合适。所以用一个类来定义最后只需调用即可

 

public class Person {
    private String lastName;
    private String firstName;
    private int  age;

    public Person(String last,String first,int a){
        lastName=last;
        firstName=first;
        age=a;
    }
    public void displayPerson(){
        System.out.println("  Last name:"+lastName);
        System.out.println("  first name:"+firstName);
        System.out.println(",Age:"+age);
    }

    public String getLast(){
        return lastName;
    }
}

class ClassDataArray{
    private Person[] a;
    private int nElems;
    public ClassDataArray(int max){
        a=new Person[max];
        nElems=0;
    }
    public Person find(String searchName){
        int j;
        for(j=0;j<nElems;j++)
            if(a[j].getLast().equals(searchName))
                break;
        if(j==nElems)
            return null;
        else return a[j];
    }
    public void insert(String last,String first,int age){
        a[nElems]=new Person(last, first,age);
        nElems++;
    }
    public boolean delete(String searchName){
        int j;
        for(j=0;j<nElems;j++)
            if(a[j].getLast().equals(searchName))
                break;
        if(j=nElems)
            return false;
        else
        {
            for(int k=j;k<nElems;k++)
                a[k]=a[k+1];
            nElems--;
            return true;
        }
    }
    public void display(){
        for(int j=0;j<nElems;j++)
            a[j].displayPerson();

    }
}


//主类
public class ClassDataAPP {
    public static void main(String[] args){

        int maxSize=100;
        ClassDataArray arr;
        arr=new ClassDataArray(maxSize);
        arr.insert("smiteer","hsjsh",32);
        arr.insert("smieere","hshhdjsh",45);
        arr.insert("smitee","hsdjdjsh",78);
        arr.insert("smitere","jsh",45);
        arr.insert("ere","hsdjshdjsh",36);
        arr.insert("seere","hsjshhdjsh",12);
        arr.insert("smite","djsh",12);
        arr.insert("smte","jshhdjsh",52);
        arr.insert("se","hsh",25);
        arr.insert("smie","hhdjh",56);
        arr.display();

        String sarchKey="smie";
        Person found;
        found=arr.find(sarchKey);
        if(found!=null){
            System.out.println("Found");
            found.displayPerson();
        }
        else
            System.out.println("can't find the "+sarchKey);

        System.out.println("delete the smie");
        arr.delete("smie");
        arr.display();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值