代码改变世界

关于顺序查找算法Knuth给出的一个改进算法

2010-04-30 13:21  lzonline01  阅读(438)  评论(1)    收藏  举报

对一个未排序的列表进行查找时,可以在列表的末尾添加一个要查找的元素这样会减少比较的次数,直接看代码吧。

传统的顺序查找

 

传统的查找算法
 1 
 2 unsigned ordinary_find(const vector<int>& vec_int, int dest) {
 3 
 4     for (int i = 0; i < vec_int.size(); i++) {
 5 
 6         if (vec_int.at(i) == dest) {
 7 
 8             return i;            
 9         }
10     }
11     return vec_int.size();
12 }

 

Knuth改进后的顺序查找

 

1 unsigned improved_find(vector<int>& vec_int, int dest) {
2 
3     vec_int.push_back(dest);
4     int index = 0;
5     while (vec_int.at(index) != dest) {
6         index++;
7     }
8     return index;
9 }

 

 

注意改进后的查找减少了比较的次数,代价是要插入一个元素,如果是数组的话需要重新申请空间,就未必方便了。