http://acm.neu.edu.cn/hustoj/problem.php?cid=1047&pid=4题意:数字1到n 任意排列 求排列成有序序列最少交换次数思路:求最小交换次数有两种 1 交换的两数必须相邻 (poj 2299) 通过归并排序求出其逆序数即为所求值 ...
分类:
其他好文 时间:
2015-02-01 16:01:00
阅读次数:
502
题意 :交换相邻的两个数来排序 最少交换几次思路:题意可以转化成求 数列中存在几个逆序数可以看作冒泡排序 但是复杂度过高 用归并排序来完成(注意 n#include#include#includeusing namespace std;int a[5000000+100];int t[5000000...
分类:
编程语言 时间:
2015-01-29 22:19:57
阅读次数:
173
原题地址链表归并排序真是恶心的一道题啊,哇了好多次才过。代码: 1 void mergeList(ListNode *a, ListNode *b, ListNode *&h, ListNode *&t) { 2 h = t = NULL; 3 while (a && b) { 4 ...
分类:
其他好文 时间:
2015-01-29 20:59:24
阅读次数:
155
四、归并排序
1、基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。
2、实例
3、java实现
1 packagecom.sort;
2
3 //稳定
4 public class 归并排序{
5 public static...
分类:
编程语言 时间:
2015-01-29 17:45:03
阅读次数:
213
本次主要记录一些经典的排序算法,其中包括冒泡排序、直接选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序、桶排序以及计数排序和基数排序。首先会给出这些排序算法的基本思想,然后给出实现的代码,最后会给出其时间复杂度。
1:冒泡排序
思想:
(1):比较相邻的前后两个元素,如果后面的数据小于前面的数据,则交换这两个数据的位置。这样经过一次遍历,最小的元素将在第0个位置,属于”冒泡”.
(...
分类:
编程语言 时间:
2015-01-29 17:39:27
阅读次数:
288
题目地址:FZU 2178
由于n最大是30,一次全搜的话妥妥的超时,那么可以采用折半搜索。分成相同的两份,对左边的一堆进行预处理,然后再处理右堆,每一次都对左堆进行二分,找最接近的。由于两个人取的不能相差多于1个,所以要对每个个数分开存储。并排序,排序是为了后边的二分。
代码如下:
#include
#include
#include
#include
#include
#inc...
分类:
其他好文 时间:
2015-01-29 17:35:12
阅读次数:
113
下面是常见排序算法的速度比较:(从慢到快)
1、冒泡排序O(N^2)
2、简单选择排序O(N^2)
3、直接插入排序O(N^2)
4、折半插入排序O(N^2)
5、希尔排序,近似为O(N^1.25) (尚无定论,但可以确定是N~N^2之间的多项式时间复杂度)
6、堆排序O(NlogN)
7、归并排序O(NlogN)
8、快速排序O(NlogN)
一般来说是快排最快的。但是...
分类:
编程语言 时间:
2015-01-29 09:34:09
阅读次数:
274
各种排序运行时间比较以下表格展现各算法的运行时间:算法最坏情况运行时间平均情况/期望运行时间插入排序θ(n2)θ(n2)归并排序θ(nlgn)θ(nlgn)堆排序O(nlgn)—快速排序θ(n2)θ(nlgn)建立一个类,将之前写的各种排序算法纳入其中,Code如下: class SortMe...
分类:
编程语言 时间:
2015-01-28 21:04:02
阅读次数:
337
题目:Sort a linked list in O(n log n)
time using constant space complexity.
思路:题目要求我们使用常数空间复杂度,时间复杂度为O(nlog(n)). 满足这个时间复杂度的有快速排序,归并排序,堆排序。插入排序时间复杂度为O(n^2). 双向链表用快排比较合适,堆排序也可用于链表,单项链表适合于归并排序。我们就用归并排序的...
分类:
编程语言 时间:
2015-01-27 11:13:51
阅读次数:
190