數據結構和算法系列9 五大查找之順序查找


從這一篇開始要介紹算法中的查找技術了。查找在我們生活中無處不在,比如查公交,查機票,查酒店。。。這些都是查找。

首先來看一下查找技術的分類。如下圖:

ds34

那么這篇要總結的是順序表中的順序查找技術。

什么是順序查找呢?順序查找的原理很簡單,就是遍歷整個列表,逐個進行記錄的關鍵字與給定值比較,若某個記錄的關鍵字和給定值相等,則查找成功,找到所查的記錄。如果直到最后一個記錄,其關鍵字和給定值比較都不等時,則表中沒有所查的記錄,查找失敗。

下面是順序查找的算法實現代碼。

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");
        }
    }
}

程序運行結果如圖:

ds32

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();
}

程序運行結果:

ds33


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM