线性查找法(LinearSearching)又称为循序式查找(SequentialSearching).
是从数据中的第一笔数据开始查找比较,如果找到则返回该值或该位置,如果没有找到则往下一步数据查找比较,直到找到最后一笔数据为止。
1、未改进LinearSerach情况下
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
/***********************************************************/
// 程序名称:LinearSearch.cpp // 程序目的:设计一个线性查找的程序 // 程序来源:数据结构与算法分析(C语言描述) P-277 // 日期:2013-8-27 19:57:22 JohnnyHu改进 /***********************************************************/ #include <stdio.h> #include <stdlib.h> int data[20] = {12, 76, 29, 22, 15, 62, 29, 58, 35, 67, 58, 33, 28, 89, 90, 28, 64, 48, 20, 77 }; // 数据数组 // 顺序查找 bool LinearSerach(int& key, int& counter) { int index = 0; // 计数变量 counter = 0; // 查找次数 while (index < 20) { counter++; if (key == data[index]) { printf("data[%d] = %d \n", index, key); return true; } index++; } return false; } // 主程序 int main(void) { int keyValue; printf("请输入您要查找的(int)值,输入0退出: "); while(scanf("%d", &keyValue)) { if (0 == keyValue) break; int counter= 0; if (LinearSerach(keyValue, counter)) printf("查找次数为: %d\n", counter); // 输出查找次数 else printf("查找的值没有发现!\n"); printf("请输入您要查找的(int)值,输入0退出: "); } return 0; } |
2、改进的LinearSerach函数,改进的线性查找法可以大幅度提高查找速度。
具体做法:将欲查找的数据放在最后一笔数据之后或者执行,并记录其存储位置,这样我们就不用这样每次都while (index < 20)判断数组已到达边界。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/***********************************************************/
// 程序名称:SearchTree.cpp // 程序目的:设计一个线性查找的程序 // 程序来源:数据结构与算法分析(C语言描述) P-277 // 日期:2013-8-27 19:57:22 JohnnyHu改进 /***********************************************************/ #include <stdio.h> #include <stdlib.h> #define MAX 20 int data[MAX+1] = {12, 76, 29, 22, 15, 62, 29, 58, 35, 67, 58, 33, 28, 89, 90, 28, 64, 48, 20, 77 }; // 数据数组 // 顺序查找 bool LinearSerach(int& key, int& counter) { int index = 0; // 计数变量 counter = 0; // 查找次数 while (true) { counter++; if (key == data[index]) { if (index != MAX) { printf("data[%d] = %d \n", index, key); return true; } else break; } index++; } return false; } // 主程序 int main(void) { int keyValue; printf("请输入您要查找的(int)值,输入0退出: "); while(scanf("%d", &keyValue)) { data[MAX] = keyValue; // 将欲查找的数据存放在最后一笔数据后 if (0 == keyValue) break; int counter= 0; if (LinearSerach(keyValue, counter)) printf("查找次数为: %d\n", counter); // 输出查找次数 else printf("查找的值没有发现!\n"); printf("请输入您要查找的(int)值,输入0退出: "); } return 0; } |
背景为黄色的部分标注的是变化的部分!
输出结果同上,但查询速度整体会提升。
本文探讨了线性查找法的概念及其在数据结构与算法分析中的应用。通过对比未改进与改进的线性查找法,展示了改进方法如何显著提高查找速度。详细介绍了改进方法的具体实现和操作流程,并通过实例演示了查找过程及效率提升效果。

1545

被折叠的 条评论
为什么被折叠?



