当前位置: 首页 > 网络应用技术

几种常见分类算法和JavaScript实现

时间:2023-03-07 16:21:38 网络应用技术

  在学习数据结构和分类算法的过程中,将发现原理和想法非常简单明了。困难是如何使用代码表达过程,这是程序员内部技能的培养。

  我在学习过程中非常喜欢一个单词:“一个好算法是一个很好的食谱。只要执行食谱的步骤,xiaobai就可以制作美味的烹饪,并且前任cangradgradgradature的经典算法也可以帮助您解决很多问题。 ”

  选择排序是最简单的理解方法。

  遍历数据以将数据中的最大值(或最小值)与开始(或结束)数据交换。

  1.从“订单数据”中找到最小值。

  2.将最小值交换为“数据顺序的开始和终端位置的要素”。

  3.“消除数据”的起始位置向后移动。

  4.周期操作为1?3,直到“测序部分”只是一个元素。

  下图显示了选择排序算法的过程。

  检测结果:

  实际上,选择排序的简单名称也创造了一个著名的慢性孩子。无论情况如何,即使原始阵列已经排序,它也将花费几乎ni/2倍被确认。

  O(N2)O(N2)O(N2)O(1)两个相邻两个元素的大小。如果大小关系和顺序订单相反,则交换两个元素的位置。

  1.“顺序数据”的第一个数据将彼此与第二个数据进行比较。

  2.如果第一个数据>第二个数据,请交换两个数据的位置。

  3.向后移动一位以进行比较数据位置。

  4.直到与最后2个数据进行比较,最后一个数据是最大值。

  5.在“订单数据”中删除末端的最大值,并在新的“消除数据”中继续上述操作。

  下图显示了冒泡分类的过程:

  检测结果:

  气泡排序是一种稳定的排序算法,是最容易实现排序的算法。最糟糕的情况是,每次都需要交换,需要将其旅行和交换近N2/2次,时间复杂性为O(n2)。最好的情况是最好的情况。发现分类是在内部周期横穿后正好的,因此出口循环为O(n)。平均而言,时间复杂性为O(N2)。因为起泡排序中只有一个缓存温度变量,所以有一个需要内存需要内存的内存。空间,因此空间复杂度是恒定的(1)平均时间复杂度|最佳情况|最糟糕的情况|空间复杂性||--------------- | - | ----- ||o(n2)|o(n)|o(n2)|o(1)

  假设已经安排了一组数据列(D0,D1,D2 ...,DN)在DA DI DI中的数据系列(D0?DI-1)之前,因此已经排列了,因此,请根据顺序数据列的尺寸关系插入DI,该方法可以根据此方法的最后数据完成。

  在开始处理之前,可以认为“排序部分”仅包括数组的启动元素,而“排序部分”包含第二个元素及其所有未来元素。排序过程如下:

  1.第一个元素被认为具有良好的订单

  2.找到下一个元素,并与之前已经排序的元素进行比较

  3.如果排序元素大于要分类的元素,则将排序的元素移回

  4.重复步骤3,直到找到排序元素小于或等于要排序的元素的位置

  5.将要排序的元素插入位置

  6.重复步骤2到5,直到最后一个元素。

  检测结果:

  这是一个稳定的排序算法。最佳情况|最坏的情况|空间复杂性||-------------------------------(N2)|o(n)|o(n2)|o(1)

  SO称为合并是指将“几个排序数据列”合并到“排序数据列”中,也就是说,要分类为几个序列的序列。子序列合并为整体顺序序列。

  采用递归方法:

  1.合并操作每个相邻数字的序列以形成地板(N/2)序列。分类后,每个序列包含两个元素

  2.合并上述序列形成地板(N/4)序列。每个序列包含四个元素

  3.重复步骤2直到合并所有元素

  4.合并操作,比较每一行数据列,找到最小值,然后将其放入容器中。

  5.找到最小值后,原始数组的下一个数据将称为起始值。

  下图显示了3个数据列的显示。每个数据列可用后,下一个数据将成为启动元素。

  检测结果:

  从效率的角度来看,稳定的排序算法,合并和排序可以被视为排序算法中的“最佳”。假设数组的长度为n,则分阵数量需要logn,每个步骤都是普通合并数组的过程。时间复杂性为o(n),因此其全面的时间复杂性为o(nlogn)另一方面,在递归和排序过程中分配的子阵列需要存储在内存空间中,其空间复杂性是o(n)。就像选择排序一样,合并和排序的性能不是受输入数据的影响,但是性能比选择排序的方法要好得多,因为它始终是O(nlogn)的时间复杂性。其他内存空间需要成本。

  o(nlogn)o(nlogn)o(nlogn)o(n)通过一种将要分类为独立部分的两个部分。所有数据都比另一部分的所有数据小,然后遵循此方法。有序序列。

  快速对划分策略的划分进行分类,将序列(列表)分为两个子序列。这些步骤是:1。从配额中挑选一个元素,称为“基准”(枢轴)。

  2.重新安排数字,所有小于基准值的元素都放置在基准的前面,并且所有大于基准值的元素都在基准后面(相同的数字可以在侧面)。该分区结束后,基准分配在数字列的中间。

  3.比基准元素递归(递归地)对子Quota的数量和子Queen -基准元素的数量进行排序。

  下图显示了初始元素作为快速分类的基准值的使用:

  检测结果:

  快速分类是不稳定的。为快速排序交换的每个元素都可能不相邻,因此它可能会在相同的值与同一元素之间打破顺序。

  o(nlogn)o(nlogn)o(n2)o(1)根据一定间隔将数据分为不同的组,然后插入每个组分类。

  1.将数据包间隔初始化为N/2(业务的整数部分)

  2.当差距成1时,执行周期

  3.将数据列与差距作为间隔

  4.插入并分类每组

  5.间隙/2进入差距。

  下图显示了使用Hill分类的过程

  检测结果:

  不稳定分类算法,山丘排序第一个突破O(n2)排序算法;这是简单地插入排序的改进版本;它不同于插入分类的稳定。Hill的分类不稳定,Hill的分类时间复杂性和阶梯长度选择的选择与平均时间复杂性有关|最佳情况|最坏的情况|空间复杂性||-------------- |---- |---------- ||O(N1.3)|o(n)|o(n2)|o(1)

  除上述6种算法外,常用的计数排序和推动测序算法。堆叠测序算法涉及二进制树数据结构的知识,然后慢慢补充手柄。

  原始:https://juejin.cn/post/7094903421018472479