从这一篇开始要介绍算法中的查找技术了。查找在我们生活中无处不在,比如查公交,查机票,查酒店。。。这些都是查找。
首先来看一下查找技术的分类。如下图:
那么这篇要总结的是顺序表中的顺序查找技术。
什么是顺序查找呢?顺序查找的原理很简单,就是遍历整个列表,逐个进行记录的关键字与给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录。如果直到最后一个记录,其关键字和给定值比较都不等时,则表中没有所查的记录,查找失败。
下面是顺序查找的算法实现代码。
C#版:
namespace SequenceSearch.CSharp { class Program { static void Main(string[] args) { List<int> list = new List<int> { 50, 10, 90, 30, 70, 40, 80, 60, 20 }; Console.WriteLine("********************顺序查找********************\n"); Display(list); int result = SequenceSearch(list, 30); if (result != -1) Console.WriteLine("30在列表中的位置是:{0}", result); else Console.WriteLine("对不起,列表中不存在该元素!"); Console.ReadKey(); } /// <summary> /// 顺序查找 /// </summary> /// <param name="list">待查列表</param> /// <param name="key">关键字</param> /// <returns>返回关键字在列表中的位置</returns> public static int SequenceSearch(List<int> list, int key) { //遍历查找列表 for (int i = 0; i < list.Count; i++) { //找到该记录,返回位置序号 if (list[i] == key) return i; } //没有找到 return -1; } private static void Display(IList<int> list) { Console.WriteLine("\n**********展示结果**********\n"); if (list != null && list.Count > 0) { foreach (var item in list) { Console.Write("{0} ", item); } } Console.WriteLine("\n**********展示完毕**********\n"); } } }
程序运行结果如图:
C语言版:
/*包含头文件*/ #include "stdio.h" #include "stdlib.h" #include "io.h" #include "math.h" #include "time.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 #define MAXSIZE 20 typedef int Status; typedef struct { int data[MAXSIZE]; int length; }SeqList; /*顺序查找算法*/ int SequenceSearch(SeqList *seqList,int key) { int i; //遍历顺序表 for (i=0;i<seqList->length;i++) { //找到该元素 if (seqList->data[i]==key) return i; } //没有找到 return -1; } /*打印结果*/ void Display(SeqList *seqList) { int i; printf("\n**********展示结果**********\n"); for (i=0;i<seqList->length;i++) { printf("%d ",seqList->data[i]); } printf("\n**********展示完毕**********\n"); } #define N 9 void main() { int i,j; SeqList seqList; //定义数组和初始化SeqList int d[N]={50,10,90,30,70,40,80,60,20}; for (i=0;i<N;i++) { seqList.data[i]=d[i]; } seqList.length=N; printf("***************顺序查找***************\n"); Display(&seqList); j=SequenceSearch(&seqList,70); if (j!=-1) printf("70在列表中的位置是:%d\n",j); else printf("对不起,没有找到该元素!"); getchar(); }
程序运行结果: