java数据结构与算法-有序数组二分查找

一、首先创建有序数组的class,并且提供插入、二分查找功能。

import android.util.Log;

/**
 * Created by Xi
 * 有序数组二分查找
 */

public class ArrayOrderBinary {
    private long[] orderArray;//有序数组
    private int nElems;//数组里元素数量,没插入一个才会增加
    public ArrayOrderBinary(int max){
        orderArray=new long[max];
        nElems=0;
    }

    /**
     * 数组中元素数量
     * @return
     */
    public int size(){
        return nElems;
    }

    /**
     * 查找指定元素的位置
     * @return
     */
    public int find(long searchKey){
        int lowerBound=0;
        int upperBound=nElems-1;
        int curIn;
        while(true){
            curIn=(lowerBound+upperBound)/2;
            if(orderArray[curIn]==searchKey)//找到了,正是curIn
                return curIn;
            else if(lowerBound>upperBound)///没找到
                return nElems;//返回大于最大索引整数
            else{
                if(orderArray[curIn]<searchKey)//往后查找
                    lowerBound=curIn+1;
                else//往前查找
                    upperBound=curIn-1;
            }
        }
    }

    /**
     * 插入元素
     */
    public void insert(long value){
        int inseartLoc;//别插入的位置
        for(inseartLoc=0;inseartLoc<nElems;inseartLoc++)
            if(orderArray[inseartLoc]>value)break;//若当前数组元素大于被插入元素,则继续往后移动,寻找位置,直到找到位置
        for(int k=nElems;k>inseartLoc;k--){//将inseartLoc后面的元素都往后移动一位
            orderArray[k]=orderArray[k-1];
        }
        orderArray[inseartLoc]=value;
        nElems++;
    }

    /**
     * 展示有序数组
     */
    public void display(){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for(int i=0;i<nElems;i++){
            if(i==nElems-1)
                sb.append(orderArray[i]);
            else {
                sb.append(orderArray[i]);
                sb.append(",");
            }
        }
        sb.append("]");
        Log.v("ArrayOrderBinary",sb.toString());
    }
}


二、在主类中调用二分查找功能

/**
     * 有序数组二分查找
     */
    private void orderarryBinarySearch(){
        ArrayOrderBinary orderArray=new ArrayOrderBinary(20);
        orderArray.insert(12);
        orderArray.insert(55);
        orderArray.insert(2);
        orderArray.insert(3);
        orderArray.insert(5);
        orderArray.insert(88);
        orderArray.insert(13);
        orderArray.display();
        int searchKey=55;
        if(orderArray.find(searchKey)!=orderArray.size())//找到
            Log.v(TAG,"Found "+searchKey);
        else
            Log.v(TAG,"Can't find"+searchKey);
    }

打印日志如下:



源码下载地址:点击打开链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值