查找一,基于ST的顺序与二分 总结关键字

顺序:

        for(Node x = first; x !=null,x=x.next){

          if(key.equals(x.key))

          {

          return x.val;(x.val = val;)

            }  

      }

 

二分:  (基于有序数组)

    迭代  

        rank

        int mid ;

        int cmp;

        while(lo>=hi){

          mid = lo+(hi-lo)/2;

          cmp =  key.compareTo(keys[mid]);

          if(cmp <0)  hi=mid-1;

          else if (cmp>0) lo = mid +1;

          else return mid;

 

        }return lo;

    递归:

        rank(Key key,int lo ,int hi){

      

           mid = lo+(hi-lo)/2;

          cmp =  key.compareTo(keys[mid]);

          if(cmp <0)  rank(key, lo, mid-1);

          else if (cmp>0)  rank(key, mid+1,hi);

          else return mid;

}

 

 

比较

              最坏情况下的成本    平均情况下的成本      是否高效低支持有序性的相关操作

              查找       插入     查找       插入

顺序查找(无序链表)     N     N      N/2    N          否

二分查找(有序数组)     lgN    2N      lgN   N        是

 

 

顺序查找适合小型问题

二分插入很慢

posted @ 2015-03-09 00:38  NYK  阅读(127)  评论(0编辑  收藏  举报