zoukankan      html  css  js  c++  java
  • 二分查找

    二分查找是一种算法,输入的是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找会返回其位置;否则返回null.

    下面的例子用来说明二分查找的工作原理:

    现在有 1,2,3,4 ....100  的数字 .我随便想了一个数字,比如 73。你的目标是以最少的次数猜到 73 这个数字。你每次猜测后 我会告诉你小了、大了 还是对了!

    傻瓜式的找:从1 开始猜到100 ,需要猜测100次,属于简单查找。

     

    更佳的猜测是:

    从50开始。 小了排除一半的数字。50都小了,再猜50~100中间的数字 75,依此这样猜测中间的数字,每次都排除一半的数字!

    这就是二分查找。

    不管我想的是哪个数字,你总是能7次之内猜到!因为每次都排除很多数字!

    对于N个元素的有序列表,用二分查找最多需要log2N(以2为底的对数)

     

     

      1     
     1   class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             int target = 40;//要查找的目标
     6             int[] orderlyArr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 20, 30, 40, 50, 60, 70, 80, 90, 100 };//有序列表
     7             Searching.BinarySearch(orderlyArr, target, out int targetIndex);
     8             switch (targetIndex)
     9             {
    10                 case -1:
    11                     Console.WriteLine("在orderlyArr数组中没有找到 target " + target);
    12                     break;
    13                 default:
    14                     Console.WriteLine("在orderlyArr数组中找到 target " + target + " 的下标为:" + targetIndex);
    15                     break;
    16             }
    17             Console.ReadKey();
    18         }
    19     }

     

           /// <summary>
     2         /// 二分查找
     3         /// </summary>
     4         public static void BinarySearch(int[] arr, int target, out int targetIndex)
     5         {
     6             int num = 0; //查找次数
     7 
     8             targetIndex = -1;
     9             int low = 0;
    10             int hight = arr.Length;
    11             //什么情况下进行查找:hight > low 
    12             while (hight - low > 1)
    13             {
    14                 num++;
    15                 Console.WriteLine(string.Format("第{0}次查找", num));
    16                 int midd = (hight + low) / 2;
    17                 int itemValue = arr[midd];
    18                 if (itemValue > target)
    19                 {
    20                     hight = midd - 1;
    21                 }
    22                 else if (itemValue < target)
    23                 {
    24                     low = midd + 1;
    25                 }
    26                 else
    27                 {
    28                     targetIndex = midd;
    29                     return;
    30                 }
    31             }
    32         }

     

     

  • 相关阅读:
    「CodeForces
    「POJ
    「CodeForces
    「CodeForces
    【CodeForces 717C】Potions Homework
    【CodeForces 730H】Car Repair Shop
    【CodeForces 730H】Delete Them
    【Gym 100947I】What a Mess
    j
    PDE工具箱的简单使用
  • 原文地址:https://www.cnblogs.com/zhaolaosan/p/15178855.html
Copyright © 2011-2022 走看看