文章 2021-12-01 来自:开发者社区

【愚公系列】2021年11月 C#版 数据结构与算法解析(树查找)

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;左、右子树也分别为二叉排序树。二叉树查找需要先生成一个二叉排序树,再遍历所有节点逐一比较其值与关键字是否相同,相同则返回;若一直找不到,则返回-1。示例:public class BSTNode {  &am...

文章 2021-12-01 来自:开发者社区

【愚公系列】2021年11月 C#版 数据结构与算法解析(插值查找)

插值查找是二分查找的更高效版本,它不会每次按2平分原问题规模,而是应用一个技巧来尽快的接近目标关键字。示例public class Program {    public static void Main(string[] args) {        int[] array = { 8, 11, 21, 28, 32, 43, 48,....

文章 2021-12-01 来自:开发者社区

【愚公系列】2021年11月 C#版 数据结构与算法解析(斐波那契查找)

斐波那契查找是区间中单峰函数的搜索技术,它在二分查找的基础上根据斐波那契数列进行分割的。在斐波那契数列找一个等于或略大于查找表中元素个数的数F[n],如果原查找表长度不足F[n],则补充重复最后一个元素,直到满足F[n]个元素时为止。完成后进行斐波那契分割,即F[n]个元素分割为前半部分F[n-1]个元素,后半部分F[n-2]个元素,根据值的关系确定往前或往后查找,直到找到时为止。如果一直找不到....

文章 2021-12-01 来自:开发者社区

【愚公系列】2021年11月 C#版 数据结构与算法解析(二分查找)

二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使....

文章 2021-12-01 来自:开发者社区

【愚公系列】2021年11月 数据结构与算法解析(顺序查找)

顺序查找也称线性搜索(Linear Search),是在一个已知无(或有序)序队列中找出与给定关键字相同的值的具体位置。原理是让关键字与队列中的第1个(或最后1个)位置的值逐个比较,直到找出与给定关键字相同的值为止,它的缺点是效率低下。示例public class Program {    public static void Main(string[] args) { &am...

文章 2021-11-05 来自:开发者社区

经典排序算法解析(四)

八、堆排序    堆排序是比快速排序更加复杂的一种排序算法。堆排序使用到了堆这样一种数据结构。首先我们需要搞清楚什么是堆结构。堆是一种类似完全二叉树,同时又满足如下条件的数据结构:所有子节点的值总是小于(大于)父节点。所有子节点的值都小于父节点的堆叫大顶堆,所有子节点都大于父节点的堆叫小顶堆。    二叉树你应该比较熟悉,下图就是一个小顶堆的示例:此二叉树....

经典排序算法解析(四)
文章 2021-11-05 来自:开发者社区

经典排序算法解析(三)

六、双向冒泡排序    双向冒泡排序是冒泡排序的一种变体,冒泡排序每次比较都是从左向右,找出最大的放在最后。双向冒泡排序则是第一轮从左向右将最大的放最后,第二轮从右向左将最小的放最首,如此交替直到整个数列排序完成。文字描述双向冒泡排序步骤如下:1.从左向右依次比较相邻两个元素,如果顺序不对,则进行交换,如此一轮下来,最大的元素在最后。2.除去已经排序好的元素,从右向左依次比较....

经典排序算法解析(三)
文章 2021-11-05 来自:开发者社区

经典排序算法解析(二)

三、希尔排序    希尔排序也是插入排序的一种,它先将整个数列分割成若干个小的子序列进行插入排序,逐渐减少子序列的个数,直到最后组合成一个数列,完成整个排序过程。希尔排序的过程使用文字描述可以表示为如下几步:1.假设数列元素个数为n,先取一个小于n的增量d1,将所有间隔d1距离的元素放为1组进行插入排序,d1通常取值n/2,向下取整。2.再次取d2<d1,将所有间隔d2....

经典排序算法解析(二)
文章 2021-11-05 来自:开发者社区

经典排序算法解析(一)

许多高级语言中都提供有排序函数,但是掌握一些经典排序算法的基本原理和编码方法还是很有必要,这个学习过程可以帮助我们更好的理解每种排序算法的设计思路,本篇博客将介绍9种十分经典的排序算法,提供了解释性语言JavaScript与编译型语言C的源代码。一、直接插入排序    直接插入排序是最简单的一种排序算法,也最容易理解。它的核心思想为将元素逐个插入一个有序的数列中。用文字描述可....

经典排序算法解析(一)
文章 2021-09-18 来自:开发者社区

任务调度:时间轮算法经典案例解析及应用实现

原创 平勇(润辰) 淘系技术  2020-09-18背景最近的一次招聘面试中,候选人介绍了他基于时间轮算法实现的一套任务调度系统,在我的个人历史工作中简单的场景会直接使用java自带的工具类,如Timer、 ScheduledThreadPool、DelayQueue 配合线程池等方法 ,复杂的一些场景用开源工具包Quartz、集团的SchedulerX等,但一直没....

任务调度:时间轮算法经典案例解析及应用实现

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

产品推荐

域名解析DNS

关注DNS行业趋势、技术、标准、产品和最佳实践,连接国内外相关技术社群信息,追踪业内DNS产品动态,加强信息共享,欢迎大家关注、推荐和投稿。

+关注
相关镜像