zoukankan      html  css  js  c++  java
  • 算法设计技巧与分析(1)二分搜索的前提——线性搜索

     从今天起复习算法,写的不对的地方还请各路大神指点迷津,神仙请绕道。

    1.问题描述

    给定一个长度为n的数组A,查找元素x是否在A中。

    2.解决方案描述

    一种最直接的方法是扫描A中的所有项目,将每个项目与x比较,如果找到相等的项目A[i],则返回数组下标i,否则返回-1,表示没找到。这种方法成为顺序搜索,由于元素比较的最大次数和序列的大小成线性关系,所以又称为线性搜索。

    3.算法的代码表示

     1     /// <summary>
     2     /// 线性搜索
     3     /// </summary>
     4     /// <param name="array">搜索的源数组</param>
     5     /// <param name="x">要搜索的值</param>
     6     /// <returns>如果找到该值,返回该值所在的数组下标;否则返回-1</returns>
     7     static int LinearSearch(int[] array, int x)
     8     {
     9         int i = 0;
    10         while (i < array.Length)
    11         {
    12             if (x == array[i]) return i;
    13             i++;
    14         }
    15         return -1;
    16     }

    4.算法的调用

     1         static void Main(string[] args)
     2         {
     3             int[] TestArray = { 10, 2, 9, 5, 6, 3 };
     4             Console.WriteLine("测试数组为:");
     5             for (int i = 0; i < TestArray.Length; i++)
     6             {
     7                 Console.Write("{0} ", TestArray[i]);
     8             }
     9             Console.WriteLine("
    请输入你要查找的整数:");
    10             string TargetNum = Console.ReadLine();
    11             int Num;
    12             while (!int.TryParse(TargetNum, out Num))
    13             {
    14                 Console.WriteLine("你的输入不合法!
    请输入你要查找的整数:");
    15                 TargetNum = Console.ReadLine();
    16             }
    17             int Result = LinearSearch(TestArray, Num);
    18             if (Result != -1)
    19                 Console.WriteLine("你查找的数字在该数组的下标为:{0}", Result);
    20             else
    21                 Console.WriteLine("在该数组中找不到你输入的数字");
    22             Console.Read();
    23         }    

    5.算法分析

    直观上,如果数组是无序的,那么扫描A中所有元素是不可避免的。但是如果数组是有序的,那么扫描A中所有元素则不是最佳选择。比如数组为{1,2,3,4,5,6},如果我要搜索6是否在数组中,那么我将要扫描6次,这是最耗时的搜索。

    那么如何保证在最短时间内找到有序数组里的元素呢?下节见分晓。

  • 相关阅读:
    wx小程序用canvas生成图片流程与注意事项
    mysql导入导出csv
    机房测速
    python 后台服务
    python获取硬件信息模块
    nagios外部命令接口
    nginx下的nagios pnp4nagios
    supervisor运行virtualenv环境下的nagios-api
    check_mk通用应用检测插件
    pnp4nagios 性能调优
  • 原文地址:https://www.cnblogs.com/rainlam163/p/3663163.html
Copyright © 2011-2022 走看看