微信公众号:bigsai 前言 在排序中,我们可能大部分更熟悉冒泡排序、快排之类。对归并排序可能比较陌生。然而事实上归并排序也是一种稳定的排序,时间复杂度为O(nlogn). 归并排序是基于分治进行归并的,有二路归并和多路归并.我们这里只讲二路归并并且日常用的基本是二路归并。并且归并排序的实现方式有 ...
分类:
编程语言 时间:
2020-02-02 19:48:33
阅读次数:
100
1. 本人做法,采用了取巧的方法,利用了java的comparartor与自带的sort函数,先拆链表再构建链表,java还是好用啊 2. 递归做法 学! 3. 迭代法(归并排序中的merge过程,逐个比较)这里最好创建一个新的链表,如果在原有的链表(l1或者l2上面操作的话会很麻烦) ...
分类:
其他好文 时间:
2020-02-02 15:45:33
阅读次数:
61
有一道题是链式的:石子归并 加上环怎么办? 断环为链:将长度为n的链复制一份接在后面,环的情况就是长度为2n的链中任意连续的长度为n的链。 ...
分类:
其他好文 时间:
2020-02-02 11:35:41
阅读次数:
52
【思路】 我们 dp[i][j] 来表示合并第 i 堆到第 j 堆石子的最小代价。 那么状态转移方程为 dp[i][j] = min ( dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]); 其中, w[i][j] 表示把两部分合并起来的代价,即从第 i 堆到第 j 堆石子个 ...
分类:
其他好文 时间:
2020-02-02 11:35:27
阅读次数:
46
归纳 1.时间复杂度为o(n^2) 冒泡排序 选择排序 插入排序 希尔排序 2.时间复杂度为o(nlogn) 快速排序 归并排序 堆排序 3.时间复杂度为线性排序 计数排序 桶排序 基数排序 ...
分类:
编程语言 时间:
2020-02-02 11:33:32
阅读次数:
66
5. 归并排序 ? 两个有序数组合并并不难, 但是归并的思想确实是这个, 但是如何分, 分到何时呢 ? 这个名字含义就是分为 两个阶段执行 先说并吧, 并要求是两个已经排序好了的数组(两个连续数组是位置上也连续) , 比如 , 连续数组 和`3,4 1,2 4`进行排序 , 对于两个已经排序好了的数 ...
分类:
编程语言 时间:
2020-02-02 01:37:57
阅读次数:
99
面试题51:数组中的逆序对 题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 问题分析 大多数人的第一反应就是顺序扫描整个数组,对每个数字都和后面的数字比较大小,时间复杂度为O(n^2),效率太低。 利用归并排序的 ...
分类:
编程语言 时间:
2020-01-31 20:53:19
阅读次数:
402
归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 分治法: 分割:递归地把当前序列平均分割成两半。 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。 ...
分类:
编程语言 时间:
2020-01-31 14:00:22
阅读次数:
75
partition()时间复杂度为O(n),quicksort的划分速度为O(logn),快排的排序时间改进主要取决于递归的深度,也即划分的平均程度,主要受:1.元素重复个数;2.元素的有序程度。元素过多重复时:试想有10000个元素,取值范围为(1,10),在划分时划分后的两段在总体上都会有较大的 ...
分类:
编程语言 时间:
2020-01-30 22:50:34
阅读次数:
78
1 题目 "LeetCode第21题" ,合并两个有序链表. 2 直接合并 因为已经有序了,类似归并排序中的合并一样,操作不难,直接上代码了. 3 递归合并 这个可以采用递归优化,而且不用额外设置一个移动的临时结点t.首先对两个指针进行判空操作,其中一个为空的话返回另一个,然后进行递归合并,首先创建 ...
分类:
其他好文 时间:
2020-01-30 00:04:22
阅读次数:
92