查找一,基于ST的顺序与二分 总结关键字
2015-03-09 00:38
260 查看
顺序:
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 是
顺序查找适合小型问题
二分插入很慢
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 是
顺序查找适合小型问题
二分插入很慢
相关文章推荐
- 查找算法总结之顺序查找、二分查找、静态树查找
- 查找算法总结(顺序查找、二分查找、二叉树、平衡二叉树、红黑树、散列表hash)
- 查找算法总结之顺序查找、二分查找、静态树查找
- 查找算法总结:顺序查找,二分查找,分块查找,散列查找,二叉排序树查找
- 查找算法总结(顺序查找、二分查找、二叉树、平衡二叉树、红黑树、散列表hash)
- 顺序查找和二分查找
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 2008秋-计算机软件基础- 第四章- 顺序查找,二分查找
- 顺序查找与二分查找的算法实现
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 二分查找总结
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现,附代码)
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)