选择排序选择排序就是找到数组中最小的元素,与数组的第一个元素交换,然后将剩余元素相加。找到数组中最小的元素,并与数组的第二个元素交换,以此类推,直到整个数组排序完毕。 算法思想找到数组中最小的元素,与数组第一个元素交换找到剩余元素中最小的元...
输入排序 构造有序序列时,对于未排序的序列,从后向前扫描(对于单向链表,只能从后扫描到前面)来回),找到对应的位置,插入这个。实现中通常采用就地排序(需要O(1)额外空间)算法思想从第一个元素开始,该元素可以认为已排序取出下一个元素,从按照...
Hill sort 核心:基于插入排序,对数组中任意区间 h 的元素进行排序,即每个元素被分为 h 份范围使用插入排序。该实现可能类似于插入排序,但可以在不同的步骤中使用。它更高效的原因是它考虑了子数组的大小和顺序。 山排序基于插入排序的...
算法概念 算法是解决特定问题的步骤的描述。它在计算机中表示为有界的指令序列,每条指令代表一个或多个操作。 摘自《大话数据结构》简单地说,算法就是“问题的解决方案”。同一问题可以有多种不同的解决方案。尽管这些解决方案可以达到相同的结果,但...
递归实现原理 递归调用实际上是通过回调栈来实现的。作者用一张图从阶乘(3)开始调用到最后,画出了6个序列之间发生的情况: 从上图可以看到,整个递归过程和推操作非常相似。出栈:橙色背景的圆角矩形代表执行操作的栈顶元素,灰色背景的圆角矩形...
我们看一下最简单的排序算法(也是性能最低、最好理解的),这里叫“交换排序”。 注意,这个名字是作者自己起的,网上和相关技术书籍上都没有这个算法的名字。算法矩阵的解释从 i+1 到矩阵末尾的元素,索引 j。 当 i 处的元素大于 j 处的元素...
冒泡排序算法解释 与上面的交换排序类似,冒泡排序也是使用两级循环实现的;但不同的是: 循环边界条件:冒泡排序的外层是[0, array.count-1);内层是[0, array.count-1-i)。可以看到,内层的射程不断减小,射程...
选择排序算法详解选择排序也是一个两级循环:外层循环的边界为[0, array.count-1),索引为 i。 内层循环的边界为[i+1, array.count),索引为j,可以看到内层的范围也在不断递减,范围的前面正在变成返回,而背面保持...
插入排序算法解释和快速代码实现 从数组其他元素开始排序。如果取出的元素比本元素小,则放在本元素的左边;否则,它将被放置在右侧。一般来说,这看起来有点像在玩扑克时对你刚刚拿起的牌进行排序。 插入排序也是一个两级循环:外层循环的边界是[1, a...
归并排序算法讲解归并排序使用了分而治之的思想)(分而治之的思想。顾名思义,就是将一个大的将问题分解成类似的小问题,逐一解决。在实现归并排序算法时,首先将数组逐渐划分为最小的组成部分(通常是1个元素),然后反向逐步合并。用图像来了解融合算法的...