关于顺序查找算法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 }
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 }
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 }
注意改进后的查找减少了比较的次数,代价是要插入一个元素,如果是数组的话需要重新申请空间,就未必方便了。

浙公网安备 33010602011771号