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]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


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

/**
     * 有序数组二分查找
     */
    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);
    }

打印日志如下:



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

 
  
 
  
 
 

你可能感兴趣的:(数据结构与算法,java,数据结构,算法,二分查找)