归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过来即可。 程序使用了嵌套程 ...
分类:
编程语言 时间:
2020-06-02 19:00:52
阅读次数:
71
1 #include<iostream> 2 #include<time.h> 3 #include<stdlib.h> 4 #include<sys/timeb.h> 5 using namespace std; 6 7 const int Max = 9999; 8 9 void swap(in ...
分类:
编程语言 时间:
2020-06-01 20:36:38
阅读次数:
63
排序算法 排序的分类: 1)内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。 2)外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。 常见的算法时间复杂度由小到大依次为: O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)< O( ...
分类:
编程语言 时间:
2020-05-31 21:24:52
阅读次数:
54
##如何选择合适的排序算法? 线性排序算法的时间复杂度比较低,适用场景比较特殊。所以如果要写一个通用的排序函数,不能选择线性排序算法。 如果对小规模数据进行排序,可以选择时间复杂度是 O(n2) 的算法;如果对大规模数据进行排序,时间复杂度是 O(nlogn) 的算法更加高效。所以,为了兼顾任意规模 ...
分类:
编程语言 时间:
2020-05-28 21:24:53
阅读次数:
81
我们以下面的数组为例子,用归并排序的方法将上述数组排序。方法:递归: 9 7 8 4 1 6 首先,先表明在归并排序中的第一个要点:将数组均等的一分为二.,这是什么意思呢?,也就是我们不是将数组拆分成: 9 7 8 4 1 6 ——>9 7|8 4 1 6 尽管这也是将原问题分解成同类的子问题,但是 ...
分类:
编程语言 时间:
2020-05-28 00:36:37
阅读次数:
79
学习博客:https://blog.csdn.net/sun_shine9112/article/details/105822859 问题 相容问题,解析时给出其他几种贪心策略(如按开始时间从小到大、每个活动时间的占用时间等),并给出这些贪心策略无法实现最优的反例。 解析 二分归并排序采用了分治的思 ...
分类:
其他好文 时间:
2020-05-27 13:44:46
阅读次数:
73
One of the main sources of efficiency in quicksort is locality of reference, where the computer hardware is optimized so that accessing memory locatio ...
分类:
编程语言 时间:
2020-05-26 18:36:35
阅读次数:
101
归并排 就是一种分治的思想 将某个问题划分为n个小的同规模算法去解决 public class StudyMergeSort { /** * 归并排思路 : * 将一个数组分割成n个小组 然后每个小组两两比较 */ public static void main(String[] args) { i ...
分类:
编程语言 时间:
2020-05-25 17:52:21
阅读次数:
69
前言 Collections#sort 追踪代码进去看,会调用到Arrays.sort,看到这里时,你肯定会想,这不是很简单,Arrays.sort在元素较少时使用插入排序,较多时使用快速排序,更多时使用归并排序,不过我要告诉你,这句话有一个前提,那就是针对基本类型排序时,是按照这个顺序,而 Col ...
分类:
其他好文 时间:
2020-05-24 22:33:53
阅读次数:
81
最近遇到的几个有意思问题,记录分享一下。 1. 合并三个有序数组(合并K个有序数组) 假如有这么三个数组:(arr包含的三个数组) 问题:K个数组,总共N个元素,合并成一个有序数组。(以升序为例) 大家一眼看上去肯定会想到归并排序,合并两个有序数组是归并排序的最后一步的动作,通过两个指针引导比较大小 ...
分类:
编程语言 时间:
2020-05-24 21:25:25
阅读次数:
66