二分查找

/*
 * 二分查找,适用于有序数组。数组有N个元素,则需要的比较次数为:logN,以2为底
*/
package test;
class Array
{
   private int[] array;
   private int nElems;
   public Array(int size)
   {
    array=new int[size];
    nElems=0;
   }
   public void insert(int item)
   {
    int i;
    int j;
   for(i=0;i<nElems;i++)
    if(array[i]>item)
     break;
   for(j=nElems;j>i;j--)
    array[j]=array[j-1];
   array[j]=item;
   nElems++;
   }
   public int find(int key)
   {
    int lower=0;
    int upper=nElems-1;
    int mid;
    while(true)
    {
     mid=(lower+upper)/2;
     if(array[mid]==key)
      return mid;
     else if(lower>upper)
      return nElems;
     else
     {
      if(array[mid]>key)
       upper=mid-1;
      if(array[mid]<key)
       lower=mid+1;
     }
   
    }
   }
   public boolean delete(int key)
   {
    int j=find(key);
    if(j==nElems)
     return false;
    else
    {
     for(int i=j;i<nElems;i++)
      array[i]=array[i+1];
     nElems--;
     return true;
    }
   }
  
   public void display()
   {
    for(int i=0;i<nElems;i++)
     System.out.print(array[i]+" ");
   }
}
public class orderArray
{
  public static void main(String[] args)
 {
  Array Arr=new Array(20);
  for(int i=0;i<10;i++)
  {
   int n=(int)(java.lang.Math.random()*99);
   Arr.insert(n);
  }
  Arr.display();
  System.out.println("寻找");
  int n=Arr.find(17);
  System.out.println(n);
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值