zoukankan      html  css  js  c++  java
  • 算法 binary search

    1. // --------------------------------------------------------------------------------------------------------------------  
    2. // <copyright company="Chimomo's Company" file="Program.cs">  
    3. // Respect the work.  
    4. // </copyright>  
    5. // <summary>  
    6. // The binary search (not recursive).  
    7. // [折半查找的前提]:  
    8. // 1、待查找序列必须採用顺序存储结构。  
    9. // 2、待查找序列必须是按keyword大小有序排列。

        

    10. // </summary>  
    11. // --------------------------------------------------------------------------------------------------------------------  
    12.   
    13. namespace CSharpLearning  
    14. {  
    15.     using System;  
    16.   
    17.     /// <summary>  
    18.     /// The program.  
    19.     /// </summary>  
    20.     internal class Program  
    21.     {  
    22.         /// <summary>  
    23.         /// Entry point into console application.  
    24.         /// </summary>  
    25.         public static void Main()  
    26.         {  
    27.             int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  
    28.             Console.WriteLine(BinarySearch(a, 6, 9));  
    29.         }  
    30.   
    31.         /// <summary>  
    32.         /// 在长度为n的有序数组a中查找值为key的元素(非递归查找)。  
    33.         /// </summary>  
    34.         /// <param name="a">  
    35.         /// 待查找数组。

        

    36.         /// </param>  
    37.         /// <param name="key">  
    38.         /// 目标元素。

        

    39.         /// </param>  
    40.         /// <param name="n">  
    41.         /// 数组长度。

        

    42.         /// </param>  
    43.         /// <returns>  
    44.         /// 若查找到目标元素则返回该目标元素在数组中的下标。否则返回-1。  
    45.         /// </returns>  
    46.         private static int BinarySearch(int[] a, int key, int n)  
    47.         {  
    48.             int low = 0;  
    49.             int high = n - 1;  
    50.             while (low <= high)  
    51.             {  
    52.                 int mid = (low + high) / 2;  
    53.                 if (a[mid] == key)  
    54.                 {  
    55.                     return mid;  
    56.                 }  
    57.   
    58.                 if (a[mid] < key)  
    59.                 {  
    60.                     low = mid + 1;  
    61.                 }  
    62.                 else  
    63.                 {  
    64.                     high = mid - 1;  
    65.                 }  
    66.             }  
    67.   
    68.             return -1;  
    69.         }  
    70.     }  
    71. }  
    72.   
    73. // Output:  
    74. /* 
    75. 5 
    76. */  
    77. 时间复杂度:O(log2n)
  • 相关阅读:
    express中间件原理 && 实现
    vue、react、angular三大框架对比 && 与jQuery的对比
    javascript数据基本类型和引用类型区别详解
    HTML页面的重绘(repaint)和重流(reflow)
    web worker原理 && SSE原理
    C++ STL 初探
    JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules
    nodejs(三) --- nodejs进程与子进程
    数学图形之海螺与贝壳
    数学图形之螺旋管
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6844277.html
Copyright © 2011-2022 走看看