什么是合并排序:合并排序就是将两个或多个有序表合并成一个有序表,将两个有序表合并成一个有序表称为二路合并算法描述 :二路合并排序的基本思想是:对于两个有序表合并,初始时, 把含有n个结点的待排序序列看作有n个长度为1的有序子表所组成,将它们依次两两合并,得到长度为2的若干有序子表,再对这些子表进行两两合并,一直重复到长度为n,排序完成。合并排序过程:初始序列:?二路合并排序需要较大的辅助
分类:
编程语言 时间:
2018-05-11 23:38:28
阅读次数:
279
一、归并排序 核心:有序子列的归并 如果两个子列一共有N个元素,则归并的时间复杂度是? T(N) = O(N) 二、递归算法 分而治之 T(N)=T(N/2)+T(N/2)+O(N) T(N)=O(NlogN) 统一函数接口 如果只在Merge中声明临时数组 void Merge(ElementTy ...
分类:
编程语言 时间:
2018-05-11 10:42:31
阅读次数:
241
前面几篇介绍的选择排序、插入排序、冒泡排序等都是非常简单非常基础的排序算法,都是用了两个for循环,时间复杂度是平方级别的。本篇介绍一个比前面稍微复杂一点的算法:归并排序。归并排序算法里面的归并思想和递归方法是值得我们学习的,归并的过程往往伴随着递归,其他很多地方都会用这两种方法,比如前面一篇《剑指 ...
分类:
编程语言 时间:
2018-05-10 20:50:21
阅读次数:
204
1.对几乎有序的数组排序 问题:给定数组arr,元素个数为N,将其排序后元素移动的顺序不超过K,其中K<<N。 分析: 1.冒泡排序,选择排序,快速排序,归并排序等排序时间复杂度与数组状态无关。 2.插入排序复杂度为O(N*K) 3.改进后的堆排序可以做到O(N*logK) 改进后的堆排序: 1.考 ...
分类:
编程语言 时间:
2018-05-06 14:47:29
阅读次数:
132
第十周课下作业(补做课堂测试) 一、知识点总结 1、单链表 创建单链表 链表中数据的插入 链表中数据的排序 链表中数据的删除 2、排序 树集概念 树映射 通过关键字进行排序 二、补做内容与截图 1、单链表 创建链表 创建结点 插入自己的学号并排序 删除自己的学号并打印 整体代码 运行结果 2、排序 ...
分类:
其他好文 时间:
2018-05-05 12:41:10
阅读次数:
184
什么是并排报表呢? 按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面。 注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用不同数据源的) 报表。 依照惯例,我们先来看看我们最后实现的效果,如图: 第一步:窗体布局。 新建一 ...
分类:
其他好文 时间:
2018-05-04 15:26:02
阅读次数:
350
题意:给你一些字符串,字符串的权值是逆序对个数,对这个权值排序字符串 对每个字符串归并排序求逆序对即可(我归并排序写跪了就很捞) ...
分类:
其他好文 时间:
2018-05-02 20:55:52
阅读次数:
112
常见排序算法有 1. 选择排序 2. 插入排序 3. 冒泡排序 4. 快速排序 5. 归并排序 这里写了5种排序的java demo,还有很多排序,希尔排序,计数排序,堆排序,基数排序等 Sort.java ...
分类:
编程语言 时间:
2018-05-01 12:26:00
阅读次数:
179
归并排序 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。 针对上面同一问题 冒泡排序 插入排序 回溯法 输入一个字符串,按字典序打印出该字符串 ...
分类:
编程语言 时间:
2018-05-01 12:24:57
阅读次数:
174
二路归并排序:其核心思想时将问题一分为二,并递归调用一分为二方法,使问题分割到不能再分各的原子问题,然后再归并,从实现原子问题开始,层层向上归并,最终解决整体问题。即所谓“分而治之,万流归一” 二路归并排序的时间复杂度计算如下: 参考资料:算法导论 递归算法的时间复杂度求解: 二路归并java实现: ...
分类:
编程语言 时间:
2018-04-29 11:50:06
阅读次数:
215