首先,明确两个概念:
逆序对:数列a[1],a[2],a[3]…中的任意两个数a[i],a[j] (ia[j],那么我们就说这两个数构成了一个逆序对.
逆序数:一个数列中逆序对的总数.
例题一:POJ 1804. 点击打开链接
解题思路:每次交换只能减少一个逆序,而且必定能减少一个逆序,从而问题就转换为求逆序个数了。这题数据规模很小,暴力可过。
我这里提供了用Merge_sort的方...
分类:
编程语言 时间:
2015-03-31 18:07:05
阅读次数:
142
以前一般用树状数组和线段树做这种题
这次换个思路试试,归并排序!
#include
#include
#include
using namespace std;
typedef long long LL;
const int maxn = 111111;
int n;
int array[maxn];
int tmp[maxn];
LL ans;
void my_sort(int l,int...
分类:
编程语言 时间:
2015-03-31 17:59:25
阅读次数:
194
思路:用归并排序。对一个链表采用递归进行二等分,直到每个部分有序,然后对其进行合并。其实就是两步,先分解,然后合并有序链表。代码://对链表采用递归排序class Solution {public: ListNode* sortList(ListNode* head){ if(h...
分类:
编程语言 时间:
2015-03-31 00:23:10
阅读次数:
224
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。
不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。
胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。...
分类:
其他好文 时间:
2015-03-30 21:16:18
阅读次数:
173
链表的归并排序
特别注意取中值函数的书写
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
...
分类:
其他好文 时间:
2015-03-30 21:15:46
阅读次数:
172
在查看sql执行计划时,我们会发现表的连接方式有多种,本文对表的连接方式进行介绍以便更好看懂执行计划和理解sql执行原理。一、连接方式: 嵌套循环(NestedLoops (NL)) (散列)哈希连接(Hash Join (HJ)) (归并)排序合并连接(Sort Merge Join (SM...
分类:
数据库 时间:
2015-03-30 16:11:36
阅读次数:
146
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据非常大,一次不能容纳所有的排序记录,在排序过程中须要訪问外存。我们这里说说八大排序就是内部排序。 当n较大,则应採用时间复杂度为O(nlog2n)的排序方法:高速排序、堆排序或归并排序序。 高速排序:是眼下基于...
分类:
编程语言 时间:
2015-03-30 12:51:41
阅读次数:
265
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
在上一回、上上回以及上上上回里我们知道Nettle在玩《艦これ》。经过了一番苦战之后,Nettle又获得了的很多很多的船。
这一天Nettle在检查自己的舰队列表:
我们可以看到,船默认排序是以等级为参数。但实际上一个船的火力值和等级的关系并不大...
分类:
编程语言 时间:
2015-03-30 11:18:38
阅读次数:
147
归并操作:是将两个有序独立的文件合并成为一个有序文件的过程。
归并排序:和快速排序的过程相反,它是两个递归调用(排序子文件)后是一个归并的过程。
快速排序时,先分解成两个子问题后是两个递归调用(排序子文件)的过程。归并操作
1 基本的两路归并
2 抽象原位归并
归并排序
1 自顶向下的归并排序
2 自底向上的归并排序
3 归并排序的性能特征
归并排序的链表实现
归并排序与快速排序对比
1. 归并...
分类:
编程语言 时间:
2015-03-30 09:36:46
阅读次数:
250