算法合集
文章平均质量分 92
武梓龙_Wzill
CSDN博客专家、Java领域优质创作者
展开
-
回溯算法详解(Back Tracking)
因为它需要穷举所有可能的解空间。在最坏情况下,回溯法的时间复杂度为指数级别,即O(2^n),其中n为问题的规模。然而,回溯法的效率和稳定性可能受到问题规模的影响。对于规模较大的问题,回溯法可能会耗费大量的时间和空间。回溯法,可以系统的搜索一个问题的所有解或任一解。回溯法通常涉及到对问题状态的深度优先搜索,在搜索过程中,算法尝试一步步地构建解决方案,每次决策都会将问题状态。它通过穷举所有可能的解空间来搜索解,因此在给定的问题中,回溯法能够找到。因此,回溯法的空间复杂度通常是O(n),其中n为问题的规模。原创 2023-07-15 10:38:02 · 2435 阅读 · 0 评论 -
基数排序详解(Radix sort)
首先,准备 10 个队列,进行若干次迭代。每次迭代 ,先清空队列,然后取每个待排序数的对应十进制位,通过 哈希 ,映射到它对应的队列 中,然后将所有数字按照队列顺序 塞回 原数组 完成一次 迭代。可以认为类似 关键字排序 ,先对 第一关键字 进行排序,再对第二关键字 排序,以此类推,直到所有关键字都有序为止。原创 2023-06-10 11:07:28 · 1252 阅读 · 0 评论 -
冒泡排序详解(Bubble Sort)
构造的过程就是将无序的序列构造成一个堆的过程。堆的定义是:对于任意一个非叶子节点 i,其左子节点为 2i+1,右子节点为 2i+2,且父节点的值大于等于(或小于等于)其子节点的值。因此,我们可以从最后一个非叶子节点开始,依次将其与其子节点比较,如果不满足堆的定义,则交换位置,直到整个序列构造成一个堆为止。排序的过程就是将堆顶元素与最后一个元素交换位置,然后将剩余元素重新构造成一个堆的过程。每次交换后,堆的大小减一,因此我们可以通过一个变量来记录堆的大小,从而将排序的过程限制在堆的范围内。原创 2023-05-30 23:03:22 · 14181 阅读 · 3 评论 -
堆排序详解(Heap Sort)
构造的过程就是将无序的序列构造成一个堆的过程。堆的定义是:对于任意一个非叶子节点 i,其左子节点为 2i+1,右子节点为 2i+2,且父节点的值大于等于(或小于等于)其子节点的值。因此,我们可以从最后一个非叶子节点开始,依次将其与其子节点比较,如果不满足堆的定义,则交换位置,直到整个序列构造成一个堆为止。排序的过程就是将堆顶元素与最后一个元素交换位置,然后将剩余元素重新构造成一个堆的过程。每次交换后,堆的大小减一,因此我们可以通过一个变量来记录堆的大小,从而将排序的过程限制在堆的范围内。原创 2023-05-23 10:55:55 · 1741 阅读 · 3 评论 -
希尔排序详解(Shell Sort)
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。原创 2023-05-19 08:26:52 · 874 阅读 · 4 评论 -
选择排序详解(Selection sort)
1、第一次排序:用第一个元素和后面的元素进行对比,2和8对比,8比2大继续向后对比,然后2和1对比,1比2小,拿1继续向后比。用第二个元素8和后面的元素进行对比,8和2对比,2比8小,拿2和后面的元素进行对比。选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小元素,然后放到已排序的序列的。原创 2023-05-12 17:55:43 · 11341 阅读 · 4 评论 -
希尔排序详解(Shell Sort)
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。原创 2023-05-29 11:43:48 · 12478 阅读 · 3 评论 -
直接插入排序(Straight Insertion Sort)
直接插入排序是由两层嵌套循环组成的。外层循环标识并决定待比较的数值。内层循环为待比较数值确定其最终位置。直接插入排序将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。原创 2023-04-28 10:11:15 · 617 阅读 · 0 评论 -
分治算法详解(Divide and Conquer)
我们要查找2所在的位置,首先将原始数组折中缩小范围,找打了5和我们要查找的值不一致,然后在判断我们要查找的值是大于5还是小于5。是K次二分之后,每个区间的大小为1,找到想要的元素令n/2^k=1,可得k=log2n,(是以2为底,n的对数),所以时间复杂度可以表示O()=O(logn).成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的。算法的空间复杂度并不是计算实际占用的空间,而是计算整个算法的辅助空间单元的个数由于辅助空间是。原创 2023-04-26 20:08:25 · 947 阅读 · 0 评论