选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
分类:
编程语言 时间:
2015-01-18 22:29:37
阅读次数:
220
归并排序点击打开链接[cpp]view plaincopy//将有二个有序数列a[first...mid]和a[mid...last]合并。voidmergearray(inta[],intfirst,intmid,intlast,inttemp[]){inti=first,j=mid+1;intm...
分类:
编程语言 时间:
2015-01-18 21:05:46
阅读次数:
295
逆序数的分治求解,时间复杂度O(nlgn)。基本思想是在归并排序的基础上加逆序计数。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 8 #define MAXN 100005...
分类:
其他好文 时间:
2015-01-18 16:55:41
阅读次数:
162
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并过程为:比较a[i]和a[...
分类:
编程语言 时间:
2015-01-18 00:50:00
阅读次数:
257
花了点时间一次性实现9个基本排序算法,
其中包括:
【冒泡排序】,【直接选择排序】,【直接插入排序】,
【希尔排序】,【折半插入排序】,【快速排序】,
【堆排序】,【锦标赛排序】,【归并排序】。
储存方式是用数组,元素可以是支持重载运算符的自定义类型,
有在数组中直接复制的,也有在中间过程中用索引记录的,
但最终都结果都保存在原数组中,废话不多说了,直接上代码!...
分类:
编程语言 时间:
2015-01-17 19:31:03
阅读次数:
226
插入归并
归并排序的时间复杂度为O(nlgn),空间复杂度为O(n);
但是一般来讲,基于从单个记录开始两两归并的排序并不是特别提倡,一种比较常用的改进就是结合插入排序,即先利用插入排序获得较长的有序子序列,然后再两两归并(改进后的归并亦是稳定的,因为插入排序是稳定的)。之所以这样改进是有原因的:尽管插入排序的最坏情况是O(n^2),看起来大于归并的最坏情况O(nlgn),但通常情况下,由于插...
分类:
其他好文 时间:
2015-01-17 18:03:28
阅读次数:
222
原文:经典算法题每日演练——第十八题 外排序 说到排序,大家第一反应基本上是内排序,是的,算法嘛,玩的就是内存,然而内存是有限制的,总有装不下的那一天,此时就可以来玩玩
外排序,当然在我看来,外排序考验的是一个程序员的架构能力,而不仅仅局限于排序这个层次。 一:N路归并排序
1.概序 我们知道算法中...
分类:
编程语言 时间:
2015-01-16 12:55:26
阅读次数:
265
原文:算法系列15天速成——第三天 七大经典排序【下】今天跟大家聊聊最后三种排序: 直接插入排序,希尔排序和归并排序。 直接插入排序: 这种排序其实蛮好理解的,很现实的例子就是俺们斗地主,当我们抓到一手乱牌时,我们就要按照大小梳理扑克,30秒后, 扑克梳理完毕,4条3,5条s,哇塞...... 回忆...
分类:
编程语言 时间:
2015-01-16 09:53:07
阅读次数:
296
Sort a linked list in O(n log n)
time using constant space complexity.
MergeSort对于链表的排序,实现了就地排序的同时,时间复杂度和空间复杂度都达到了基于比较的排序的最优值,因此归并排序是链表排序的最佳排序方式。
/**
* Definition for singly-linked list.
* str...
分类:
其他好文 时间:
2015-01-15 16:01:52
阅读次数:
193
思想:将两个(或以上)的有序表组成新的有序表。说明:(1)更实际的意义:可以把一个长度为n 的无序序列看成是 n 个长度为 1 的有序子序列 ,首先做两两归并,得到 én / 2ù 个长度为 2 的子序列 ;再做两两归并,…,如此重复,直到最后得到一个长度为 n 的有序序列。(2)性能分析。空间性能...
分类:
编程语言 时间:
2015-01-15 12:21:34
阅读次数:
259