C#数据结构和算法学习系列五----基础查找算法

     数据查找是基础的计算机编程工作,而且人们对它的研究已经很多年了。有两种对列表内数据进行查找的方法:顺序查找和二叉查找。当数据项在列表内随机排列的时候可以使用顺序查找,而当数据项在列表内有序排列的时候则会用到二叉查找。

1.顺序查找算法。最突出的查找类型就是从记录集的开始处顺次遍历每条记录,直到找到所要的记录或者是到达数据集的末尾。这就是所谓的顺序查找。顺序查找(也被称为线性查找)是非常容易实现的。从数组的起始处开始,把每个访问到的数组元素依次和所要查找的数值进行比较。如果找到匹配的数据项,就结束查找操作。如果遍历到数组的末尾仍没有产生匹配,那么就说明此数值不在数组内。下面是一个执行顺序查找操作的函数

bool SeqSearch(int[] arr, int sValue)
{
     for (int index = 0; index < arr.Length ; index++) //小bug
     if (arr[index] == sValue)
          return true;
     return false;
}

如果发现匹配,那么函数会立刻返回True 并且退出。如果到达数组的末尾,函数还没有返回True,那么要查找的数值就不在数组内,而函数则会返回False。

2.二叉查找算法。当要查找的记录从头到尾都是有序排列的时候,为找到数值可以执行一种比顺序查找更加有效的查找。这种查找被称为是二叉查找。为了理解二叉查找的工作原理,请假设你正试图猜测由朋友选定的一个在1 至100 之间的数字。对于每次你所做的猜测,朋友都会告诉你是猜对了,还是猜大了,或是猜小了。最好的策略是第一次猜50。如果猜大了,那么就应该再猜25。如果猜50 猜小了,则应该再猜75。在每次猜测的时候,你都应该根据调整的数的较小或较大范围(这依赖于你猜测的数是偏大还是偏小)选择一个新的中间点作为下次要猜测的数。只要遵循这个策略,你最终一定会猜出正确的数。

int RbinSearch(int value, int lower, int upper)
{
     if (lower > upper)
          return -1;
     else
     {
          int mid;
          mid = (int)(upper+lower) / 2;
          if (value < arr[mid])
               return RbinSearch(value, lower, mid - 1);
          else if (value == arr[mid])
               return mid;
          else
               return RbinSearch(value, mid + 1, upper);
     }
}

 

     查找数据集合内的数值是一种随处可见的计算机操作。最简单的查找数据集合的方法是从数据集合的头部开始查找数据项,直到查找到该数据项或者执行到数据集合的末尾才结束。这种查找方法最好用在数据集合相对较小且无序的时候。如果数据集合是有序排列的,那么二叉查找算法会是一种较好的选择。二叉查找会持续划分数据集合直到找到所要查找的数据项为止。大家可以采用迭代方式或递归方式编写二叉查找算法。C#语言的Array 类包括有内置的二叉查找方法。在调用二叉查找的任何时候都应该可以使用此方法。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
12篇学通csharp网络编程——第四篇 TCP应用编程 12篇学通csharp网络编程——第三篇 HTTP应用编程(下) 12篇学通csharp网络编程——第二篇 HTTP应用编程(上) 12篇学通csharp网络编程——第一篇 基础之进程线程 Lucene(1)lucene,你也会(7篇)——第一篇 快速入门 MongoDB(8)8天学通MongoDB——第八天 驱动实践 8天学通MongoDB——第七天 运维技术 8天学通MongoDB——第六天 分片技术 8天学通MongoDB——第天 主从复制 8天学通MongoDB——第四天 索引操作 8天学通MongoDB——第三天 细说高级操作 8天学通MongoDB——第二天 细说增删查改 8天学通MongoDB——第一天 基础入门 UML系列(4)团队沟通利器之UML——类图 团队沟通利器之UML—— 序列图 团队沟通利器之UML——用例图 团队沟通利器之UML——活动图 wcf系列(5)wcf系列学习5天速成——第天 服务托管 wcf系列学习5天速成——第四天 wcf之分布式架构 wcf系列学习5天速成——第三天 事务的使用 wcf系列5天速成——第二天 binding的使用(2) wcf系列5天速成——第一天 binding的使用(1) wpf系列(8)8天入门wpf—— 第八天 最后的补充 8天入门wpf—— 第七天 画刷 8天入门wpf—— 第六天 细说控件 8天入门wpf—— 第天 数据绑定 8天入门wpf—— 第四天 模板 8天入门wpf—— 第三天 样式 8天入门wpf—— 第二天 xaml详解 8天入门wpf—— 第一天 基础概念介绍 并行开发(8)8天玩转并行开发——第八天 用VS性能向导解剖你的程序 8天玩转并行开发——第七天 简要分析任务与线程池 8天玩转并行开发——第六天 异步编程模型 8天玩转并行开发——第天 同步机制(下) 8天玩转并行开发——第四天 同步机制(上) 8天玩转并行开发——第三天 plinq的使用 8天玩转并行开发——第二天 Task的使用 8天玩转并行开发——第一天 Parallel的使用 多线程系列(5)5天不再惧怕多线程——第天 线程池 5天不再惧怕多线程——第四天 信号量 5天不再惧怕多线程——第三天 互斥体 5天不再惧怕多线程——第二天 锁机制 5天不再惧怕多线程——第一天 尝试Thread 经典算法专题(21)经典算法题每日演练——第二十一题 十字链表 经典算法题每日演练——第二十题 三元组 经典算法题每日演练——第十九题 双端队列 经典算法题每日演练——第十八题 外排序 经典算法题每日演练——第十七题 Dijkstra算法 经典算法题每日演练——第十六题 Kruskal算法 经典算法题每日演练——第十题 并查集 经典算法题每日演练——第十四题 Prim算法 经典算法题每日演练——第十三题 赫夫曼树 经典算法题每日演练——第十二题 线段树 经典算法题每日演练——第十一题 Bitmap算法 经典算法题每日演练——第十题 树状数组 经典算法题每日演练——第九题 优先队列 经典算法题每日演练——第八题 AC自动机 经典算法题每日演练——第七题 KMP算法 经典算法题每日演练——第六题 协同推荐SlopeOne 算法 经典算法题每日演练——第题 字符串相似度 经典算法题每日演练——第四题 最长公共子序列 经典算法题每日演练——第三题 猴子吃桃 经典算法题每日演练——第二题 家共井 经典算法题每日演练——第一题 百钱买百鸡 开发利器系列(1)介绍一个小工具 Linqer 那点所谓的分布式(2)那点所谓的分布式——memcache 那点所谓的分布式——redis 树结构专题(5)6天通吃树结构—— 第天 Trie树 6天通吃树结构—— 第四天 伸展树 6天通吃树结构—— 第三天 Treap树 6天通吃树结构—— 第二天 平衡二叉树 6天通吃树结构—— 第一天 二叉查找算法速成系列(15)算法系列15天速成——第十天 图【下】(大结局) 算法系列15天速成——第十四天 图【上】 算法系列15天速成——第十三天 树操作【下】 算法系列15天速成——第十二天 树操作【算法系列15天速成——第十一天 树操作(上) 算法系列15天速成——第十天 栈 算法系列15天速成——第九天 队列 算法系列15天速成——第八天 线性表【下】 算法系列15天速成——第七天 线性表【上】 算法系列15天速成——第六天 大经典查找【下】 算法系列15天速成——第大经典查找算法系列15天速成——第四天 大经典查找【上】 算法系列15天速成——第三天 七大经典排序【下】 算法系列15天速成——第二天 七大经典排序【算法系列15天速成——第一天 七大经典排序【上】 算法洗脑系列(8)算法洗脑系列(8篇)——第八篇 概率思想 算法洗脑系列(8篇)——第七篇 动态规划 算法洗脑系列(8篇)——第六篇 回溯思想 算法洗脑系列(8篇)——第篇 分治思想 算法洗脑系列(8篇)——第四篇 枚举思想 算法洗脑系列(8篇)——第三篇 贪心思想 算法洗脑系列(8篇)——第二篇 递归思想 算法洗脑系列(8篇)——第一篇 递推思想 天籁数学(3)天籁数学——数列篇(3) 天籁数学——数列篇(2) 天籁数学——数列篇(1) 图形图像(1)玩玩图形图像——第一篇:图片灰度化 小爬虫系列(4)玩玩小爬虫——抓取时的几个小细节 玩玩小爬虫——抓取动态页面 玩玩小爬虫——试搭小架构 玩玩小爬虫——入门
引用提到的这本书主要讲解的是C#语言数据结构算法,所以对于Unity数据结构算法的讲解可能会有所欠缺。然而,Unity作为一款游戏开发引擎,也有其自己的数据结构算法。在Unity,常用的数据结构包括但不限于数组、列表、字典和队列等,而常用的算法包括搜索算法、排序算法和图形算法等。 对于Unity数据结构,数组是最基本和常用的数据结构之一。它可以用来存储一系列相同类型的元素,可以通过索引来访问和操作数组的元素。列表则是一种动态大小的数组,可以方便地增加或删除元素。字典是一种键值对的数据结构,可以通过键来快速查找、插入和删除元素。队列是一种先进先出(FIFO)的数据结构,可以用于实现一些特定的功能,比如事件触发等。 在Unity算法的应用也非常广泛。搜索算法可以用于寻路、查找对象等功能的实现。排序算法可以用于对游戏对象进行排序,以及实现一些需要按照特定顺序展示的功能。图形算法则可以用于渲染和处理图形等方面。 总结起来,Unity数据结构算法学习主要以Unity引擎为基础,结合C#语言的特性进行应用。通过学习Unity官方文档、教程和参考书籍,掌握Unity常用的数据结构算法,可以更好地进行游戏开发和优化。同时,也可以借助C#语言数据结构算法学习,进一步提升对Unity数据结构算法的理解和应用能力。<span class="em">1</span> #### 引用[.reference_title] - *1* [C#数据结构算法](https://download.csdn.net/download/m0_37885525/10656238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值