你的位置:首页 > 软件开发 > 操作系统 > 算法—8.有序数组中的二分查找

算法—8.有序数组中的二分查找

发布时间:2015-11-29 18:00:04
1.具体算法/** * 算法3.2 二分查找(基于有序数组) * Created by huazhou on 2015/11/29. */public class BinarySearchST<Key extends Comparable<key>, Value ...

算法—8.有序数组中的二分查找

算法—8.有序数组中的二分查找

1.具体算法

/** * 算法3.2 二分查找(基于有序数组) * Created by huazhou on 2015/11/29. */public class BinarySearchST<Key extends Comparable<key>, Value> {  private Key[] keys;  private Value[] vals;  private int N;  public BinarySearchST(int capacity){    keys = (Key[])new Comparable[capacity];    vals = (Value[])new Object[capacity];  }  public int size(){    return N;  }  public boolean isEmpty() {    return size() == 0;  }  public Value get(Key key){    if(isEmpty()){      return null;    }    int i = rank(key);    if(i < N && keys[i].compareTo(key) == 0){      return vals[i];    }    else{      return null;    }  }  public int rank(Key key){    int lo = 0, hi = N-1;    while (lo <= hi) {      int mid = lo + (hi - lo) / 2;      int cmp = key.compareTo(keys[mid]);      if   (cmp < 0) hi = mid - 1;      else if (cmp > 0) lo = mid + 1;      else return mid;    }    return lo;  }  //查找键,找到则更新值,否则创建新的元素  public void put(Key key, Value val){    int i = rank(key);    if(i < N && keys[i].compareTo(key) == 0){      vals[i] = val;      return;    }    for (int j = N; j > i; j--){      keys[j] = keys[j-1];      vals[j] = vals[j-1];    }    keys[i] = key;    vals[i] = val;    N++;  }  public void delete(Key key){    if (isEmpty()) return;    // compute rank    int i = rank(key);    // key not in table    if (i == N || keys[i].compareTo(key) != 0) {      return;    }    for (int j = i; j < N-1; j++) {      keys[j] = keys[j+1];      vals[j] = vals[j+1];    }    N--;    keys[N] = null; // to avoid loitering    vals[N] = null;    // resize if 1/4 full    if (N > 0 && N == keys.length/4) resize(keys.length/2);  }}

 

海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com

原标题:算法—8.有序数组中的二分查找

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录