
排序
文章平均质量分 79
排序算法
苏貝貝
勤奋耕耘,收获满满;不辍努力,未来可期。
展开
-
【数据结构】堆排序
上面的2利用了插入思想,从第二个元素插入开始判断位置是否合适,不合适就向上调整,调整结束后,再插入并判断第三个元素是否合适……也就是说,在再次插入元素之前,所有的元素已经构成了大堆,插入元素后,再次调整直到为大堆?插入第二个元素判断位置是否合适,如果该节点的值>双亲结点的值就向上调整,调整结束后,再插入并判断第三个元素是否合适。的顺序存储方式存储在一个一维数组中,并满足:任意一个双亲结点的值=孩子节点的值),则称为。如果有一个关键码的集合K,把它的所有元素按。原创 2024-03-06 16:56:33 · 1043 阅读 · 0 评论 -
【数据结构】选择排序
在这个数组里,第一次排序时,最大值的下标maxi==begin,当交换下标为begin和mini的值后,a[begin]==1而不是 ==10,此时再交换下标为end和maxi的值时,就是1和2交换。每一次从待排序的数据元素中选出最小(或最大或最小和最大)的元素,存放在序列的起始位置(或末尾位置或起始和末尾位置),直到全部待排序的数据元素排完。那我们再试试下面的数组呢,这也是正确的吗?原创 2024-03-22 17:01:33 · 557 阅读 · 0 评论 -
【数据结构】归并排序(不用递归)
注意:上面的图只是为了方便看才感觉是在原数组上修改的,实际上是先比较2个数组,之后将这2个数组合成的数组存入额外的数组tmp中,之后再拷贝回原数组。问题:当原数组的数组元素不为2^n时,2个数组可能会越界,如下图:1还要与不是数组元素的值相比。所以我们要处理2个数组下标越界的可能。原创 2024-03-27 17:38:57 · 550 阅读 · 0 评论 -
【数据结构】快速排序(用递归)
快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后左右子序列重复该过程,直到所有元素都排列在相应位置上为止。1.定义3个变量key,prev和cur来表示数组的下标,prev和key置为第一个元素的下标,cur置为第二个元素的下标。3.当a[cur]原创 2024-03-22 21:48:15 · 1627 阅读 · 0 评论 -
【数据结构】快速排序(不用递归)
我们先插入数组的末尾元素的下标,再插入首元素的下标。当左右子树为一个元素或者为空时,不用将下标插入栈中,为一个元素的条件是:left==keyi - 1或者keyi + 1 ==right,为空的条件是left > keyi - 1或者keyi + 1 > right。原创 2024-03-24 11:47:02 · 362 阅读 · 0 评论 -
【数据结构】计数排序
按照上面的思想,数组count的下标都从0开始的话,如果数组a为{1000,1111,1222,1333,1444,…,2000},那么我们要开辟count数组,数组下标从0开始到2000结束,前1000个空间都被浪费了,所以我们还可以改进一下。可想而知,如果有一个数组的所有的值相差不大,那计数排序的效率是非常高的。这样我们就能知道数组a的元素范围range,动态开辟有range个元素的数组count,为了方便,我们用calloc函数开辟,这样count的每个元素的初始值都为0。原创 2024-03-27 21:44:32 · 474 阅读 · 0 评论 -
【数据结构】归并排序(用递归)
将数组不断分成2部分,直到这两个部分都是一个元素,将这两个部分当成两个数组,因为都是只有一个元素,所以这两个数组都是有序的,再将两个有序数组合并成一个有序数组。再看10和6的右半边是1和7,将这两个部分当成两个数组,因为也是只有一个元素,所以这两个数组都是有序的,再将两个有序数组合并成一个有序数组1,7。然后将有序数组6,10和1,7再次合并成一个有序数组1,6,7,10……归并排序核心步骤:。在讲归并排序之前,问问自己,如果有两个数组都是有序的(升序),如何将这两个有序数组合并成一个有序数组呢。原创 2024-03-24 19:58:19 · 543 阅读 · 0 评论 -
【数据结构】直接插入排序
(N-1) = (N+1)(1+N-1)/2 = N*(N-1)/2,所以时间复杂度为O(N^2)……+(N-1) = (N+1)(1+N-1)/2 = N*(N-1)/2,所以时间复杂度为O(N^2)。下面代码中,因为最后一个元素一定是tmp,所以end+1原创 2024-03-19 12:10:51 · 2047 阅读 · 1 评论 -
【数据结构】希尔排序
排序的目的是让数组从接近有序到有序。希尔排序法的基本思想是:先选定一个整数gap,把待排序文件中所有记录分成gap个组,所有距离为gap的记录分在同一组内,并对每一组内的记录进行排序。然后,取gap=gap/2或者gap=gap/3+1(里有下面会说),重复上述分组和排序的工作。3.希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些书中给出的希尔排序的时间复杂度都不固定。原创 2024-03-19 21:47:50 · 1149 阅读 · 0 评论