当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; 1.插入排序—直接插入排序(Straight Insertion Sort)基本思想:将一个记录...
分类:
编程语言 时间:
2015-04-01 19:25:51
阅读次数:
169
群里有人说面试碰到链表排序,说归并排序比较好。搜了下才知道,有这种不用额外空间的归并排序方法...实质就是用到O(1)空间将字符串后缀移到前面的方法,就是比如字符串由AB两个串连接,现在要变成BA,最直接的做法就是额外新建个字符串,然后一个个字符拷贝过来。其实这个很容易,把一个字符串倒置,O(1)做...
分类:
编程语言 时间:
2015-04-01 17:12:46
阅读次数:
155
题意:k行n列,求出每一列的逆序对,输出逆序对最少的所在的行数。
思路:采用归并排序或者树状数组,这两天写了好几道了,要练熟悉!...
分类:
编程语言 时间:
2015-04-01 13:21:53
阅读次数:
135
/输入给定数组和长度,进行排序。/代码还没测试过,如果有朋友帮我找到了BUG,不胜感激。 1 #define Elmt int 2 3 void merge_sort(Elmt* sqc, int len) { 4 Elmt t; 5 Elmt *temp; 6 int i...
分类:
编程语言 时间:
2015-04-01 13:15:16
阅读次数:
113
题意:求n个数的逆序对数,可以交换k次相邻的,所以求出原序列的逆序对后减去k即可。
思路:求逆序对有两种方法,归并排序和树状数组。逆序对的几种求法...
分类:
编程语言 时间:
2015-04-01 09:42:24
阅读次数:
296
在做清华OJ上的一道题时, 写了一个归并排序,代码如下: 1 void MergeSort(int x[], int y[], int lo, int hi) 2 { 3 /* 4 *归并排序函数,以 x[] 为标准排序 5 */ 6 7 if(lo > 1 ;10...
分类:
其他好文 时间:
2015-04-01 09:23:22
阅读次数:
127
堆排序的思想 利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。 其基本思想为(大顶堆): 1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区; 2)将堆顶元素R[1]与最后一个元素R[n]交换,此时...
分类:
编程语言 时间:
2015-03-31 23:52:59
阅读次数:
245
allocator类是一个模板,它提供类型化的内存分配以及对象构造与撤销。allocator类将内存分配与对象构造分开。当allocator对象分配内存时,它分配适当大小并排列成保存给定类型对象的空间。但是,它分配的内存时未构造的,allocator用户必须分别construct和destroy放置...
分类:
其他好文 时间:
2015-03-31 23:42:50
阅读次数:
338