算法 - 折半查找(C#)
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
- 递归实现:
// --------------------------------------------------------------------------------------------------------------------// <copyright company="Chimomo's Company" file="Program.cs">// Respect the work.// </copyright>// <summary>// The binary search (recursive).// [折半查找的前提]:// 1、待查找序列必须采用顺序存储结构。// 2、待查找序列必须是按关键字大小有序排列。// </summary>// --------------------------------------------------------------------------------------------------------------------namespace CSharpLearning{ using System; /// <summary> /// The program. /// </summary> internal class Program { /// <summary> /// Entry point into console application. /// </summary> public static void Main() { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine(BinarySearch(a, 6, 0, 9)); } /// <summary> /// 在下界为low,上界为high的有序数组a中折半查找数据元素x(递归查找)。 /// </summary> /// <param name="a"> /// 待查找数组。 /// </param> /// <param name="x"> /// 目标元素。 /// </param> /// <param name="low"> /// 数组元素下标的下界。 /// </param> /// <param name="high"> /// 数组元素下标的上界。 /// </param> /// <returns> /// 若查找到目标元素则返回该目标元素在数组中的下标;否则返回-1。 /// </returns> private static int BinarySearch(int[] a, int x, int low, int high) { if (low > high) { return -1; } int mid = (low + high) / 2; if (x == a[mid]) { return mid; } return x < a[mid] ? BinarySearch(a, x, low, mid - 1) : BinarySearch(a, x, mid + 1, high); } }}// Output:/*5*/
时间复杂度:O(log2n)
- 非递归实现:
// --------------------------------------------------------------------------------------------------------------------// <copyright company="Chimomo's Company" file="Program.cs">// Respect the work.// </copyright>// <summary>// The binary search (not recursive).// [折半查找的前提]:// 1、待查找序列必须采用顺序存储结构。// 2、待查找序列必须是按关键字大小有序排列。// </summary>// --------------------------------------------------------------------------------------------------------------------namespace CSharpLearning{ using System; /// <summary> /// The program. /// </summary> internal class Program { /// <summary> /// Entry point into console application. /// </summary> public static void Main() { int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 }; Console.WriteLine(BinarySearch(a, 6, 9)); } /// <summary> /// 在长度为n的有序数组a中查找值为key的元素(非递归查找)。 /// </summary> /// <param name="a"> /// 待查找数组。 /// </param> /// <param name="key"> /// 目标元素。 /// </param> /// <param name="n"> /// 数组长度。 /// </param> /// <returns> /// 若查找到目标元素则返回该目标元素在数组中的下标;否则返回-1。 /// </returns> private static int BinarySearch(int[] a, int key, int n) { int low = 0; int high = n - 1; while (low <= high) { int mid = (low + high) / 2; if (a[mid] == key) { return mid; } if (a[mid] < key) { low = mid + 1; } else { high = mid - 1; } } return -1; } }}// Output:/*5*/
时间复杂度:O(log2n)
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
![](/assets/blank.gif)
算法 - 折半查找(C#)相关推荐
- 查找算法——折半查找(JAVA)
折半查找 问题描述:给定一个整数X和整数A0,A1,A2--A(n-1),后者已经预先排序并在内存中,求下标i使得Ai = X ,如果X不在数据中,则返回i = -1. 我们首先可以想到的一种方法就是 ...
- 数据结构 查找 静态查找表算法 折半查找 二叉排序树查找算法 实验报告
实验内容: 基本内容: 算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较: 算法2:采用顺序存储结构创建静态查找表--有序表,对有序表进行二分查找: ...
- 查找算法——折半查找
介绍 折半查找,又称作二分查找.这个查找的算法的特点,就是,要求数据要是有序的. 1 ,存储结构一定是顺序存储 2 ,关键字大小必须有序排列 然后,利用这组有序的数据之间的关系,来进行折半的查找. 比 ...
- 二叉树 查找失败 asl_算法——二分搜索amp;折半查找
☞能够掌握求解的算法,并给出详细的执行过程. ☞对于折半搜索二叉树中,若根结点在第1层, 且分枝结点数为= 2& − 1,则外部结点均在第ℎ + 1层. 这同样也是一种利用分治法设计的查找算法 ...
- 【查找算法】折半查找算法
零.写在前面 CSDN21天学习挑战赛 本人蒟蒻一枚,文章若有不足之处请大家批评指出,欢迎大家留言. 活动地址:CSDN21天学习挑战赛 文章目录 零.写在前面 一.算法是什么? 二.折半查找算法 ...
- python实现二分查找(折半查找)算法
python实现二分查找算法 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法.但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列. 查找又称折半 ...
- php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
//php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...
- 折半查找的思想及源码_结构与算法(04):排序规则与查找算法
一.递归算法 递归就是方法自己调用自己,每次调用时传入不同的变量,可以让代码变得简洁.递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法,递归式方法可以被用于解决很多的计算 ...
- 二分查找/折半查找算法
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好:其缺点是要求待查表为有序表,且插入删除困难.因此,折半查找方法适用于不经常变动而查找频繁的有序列表.首先,假设表中元素是按升序排列,将表 ...
最新文章
- OpenStack neutron中AsyncProcess类
- 解决:libtool: line 815: X--tag=CXX: command not found
- linux lynx 源码,Linux移植浏览器 Lynx字符浏览器移植
- Xamarin效果第四篇之CollectionView子项右侧布局
- java接收uniapp上传的图片_uni-app 上传图片的坑
- matlab安装好 启动总是闪退_在Ubuntu16.04下安装MATLAB2017b
- HDU 2017 字符串统计
- shell脚本--批量测试主机连通性ping IP
- 即插即打!教你快速上手数码复合机USB打印
- 剑指offer题解 带讲解 python版 第一部分
- asp.net core 读取json文件
- linux shell 数字雨,cmd命令如何实现数字雨的效果
- Java面向对象编程(OOP)
- iOS22 地图定位- 苹果自带地图
- A股股票列表下载——从零到实盘2
- 复无法自动修复此计算机,win10自动修复而且无法重置
- Hive SQL 每日SQL
- Jenkins + 云效 前后端项目自动化部署
- 协同OA助中国制造业制造实时企业
- TYVJ P1092 麻将
热门文章
- Android Custom View系列《圆形菜单一》
- 解决Windows7修改hosts时提示:您没有权限在此位置中保存文件
- __getitem__()
- 少侠请重新来过 - Vue学习笔记(八) - Vuex
- PgSQL · 应用案例 · 阿里云 RDS PostgreSQL 高并发特性 vs 社区版本
- TxQueryRunner-JDBC小工具
- seo外链优化需要规避的那些坑
- [C++] Variable storage space
- Java从零开始学四十五(Socket编程基础)
- Android中项目中各个文件夹的含义和用途详解