从这一篇开始要介绍算法中的查找技术了。查找在我们生活中无处不在,比如查公交,查机票,查酒店。。。这些都是查找。

首先来看一下查找技术的分类。如下图:

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

posted on 2013-08-18 16:00  永远的麦子  阅读(11167)  评论(1编辑  收藏  举报