堆排序的思想 利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从无序中选择最大记录(最小记录)变得简单。 其基本思想为(大顶堆): 1)将初始待排序关键字序列(R1,R2....Rn)构建成大顶堆,此堆为初始的无序区; 2)将堆顶元素R[1]与最后一个元素R[n]交换,此时...
分类:
编程语言 时间:
2015-03-31 23:52:59
阅读次数:
245
首先,明确两个概念:
逆序对:数列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
外排序
外排序(External sorting)是指能够处理极大量数据的排序算法。通常来说,外排序处理的数据不能一次装入内存,只能放在读写较慢的外存储器(通常是硬盘)上。外排序通常采用的是一种“排序-归并”的策略。
在排序阶段,先读入能放在内存中的数据量,将其排序输出到一个临时文件,依此进行,将待排序数据组织为多个有序的临时文件。尔后在归并阶段将这些临时文件组合为一个大的有序文件,也即排序结果。...
分类:
编程语言 时间:
2015-03-30 23:08:50
阅读次数:
179
胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。
不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。
胜者树与败者树可以在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行含m个元素序列,从每行取一个数得到他们的和,一共可以得到m^n个和。输出前n个最小的和。
思路:可以用优先队列递归解决,当只取前两行的数,得到两个数的和的前n小的序列。这个序列就相当于把第一行和第二行合并,再解决n-1行的子问题。
用优先队列解决的时候也有点小技巧,类似尺取法。
//236 KB 563 ms C++ 1480 B
#include
#include
#incl...
分类:
其他好文 时间:
2015-03-30 13:28:22
阅读次数:
151