從這一篇開始要介紹算法中的查找技術了。查找在我們生活中無處不在,比如查公交,查機票,查酒店。。。這些都是查找。
首先來看一下查找技術的分類。如下圖:
那么這篇要總結的是順序表中的順序查找技術。
什么是順序查找呢?順序查找的原理很簡單,就是遍歷整個列表,逐個進行記錄的關鍵字與給定值比較,若某個記錄的關鍵字和給定值相等,則查找成功,找到所查的記錄。如果直到最后一個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查找失敗。
下面是順序查找的算法實現代碼。
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(); }
程序運行結果: