gamefrye归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(DivideandConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序的..
分类:
编程语言 时间:
2015-03-10 01:33:38
阅读次数:
178
最近开学了,又复习了下数据结构与算法,我在MOOC上学的。这次是清华oj平台上的一题。题目:范围查询(Range) 主要数据量略大...
分类:
其他好文 时间:
2015-03-10 01:30:51
阅读次数:
170
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3743 题目意思就是给你一个长为n的序列,让你求逆序对.我用的是归并排序来求的.归并排序有一个合并的过程,分前后两段,当a[i] > a[j]时,说明a[j]比前面那段啊[i],a[i+1],a[i+2]...
分类:
编程语言 时间:
2015-03-10 00:09:28
阅读次数:
190
快速排序、归并排序、堆排序三种排序算法的性能谁最好呢?网上查了一下说快速排序最快、其次是归并排序,最差的是堆排序;而理论上三种排序算法的时间复杂度都是O(nlogn),只不过快速排序最差的会达到O(n^2),但是数据的随机性会消除这一影响,今天就来实际比较一下: 1 #include 2 #i...
分类:
编程语言 时间:
2015-03-09 22:06:15
阅读次数:
213
如果归并排序中待归并的两个相邻序列分别Wi是r[start]~r[mid]和r[mid+1]~r[end],需要将其归并成一个新序列r1[start]~r1[end]:void merge(int r[], int r1[], int start, int mid, int end)
{
int i = start, j = mid + 1, k = start;
while (i...
分类:
编程语言 时间:
2015-03-09 19:12:33
阅读次数:
164
部分理论和图来自:http://www.cnblogs.com/jingmoxukong/p/4308823.html (侵删)归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即...
分类:
编程语言 时间:
2015-03-09 18:56:30
阅读次数:
158
merge函数将两列有序序列合成一列。
merge_sort 函数使用分治思想,递归求解。将对一个序列排序转换成对左右两个序列排序,一直到序列长度为一时,递归开始回升。再将左右两个已经排好序的序列合并。
//
// main.cpp
// merge_sort
//
// Created by Fangpin on 15/3/9.
// Copyright (c) 2015年 Fang...
分类:
编程语言 时间:
2015-03-09 11:00:57
阅读次数:
163
Reverse bits of a given 32 bits unsigned integer.
归并法
class Solution {
public:
uint32_t reverseBits(uint32_t n) {
n=(n>>16)|(n<>8)|((n&0x00ff00ff)<<8);...
分类:
其他好文 时间:
2015-03-08 18:53:49
阅读次数:
137
逆序对裸题。可以用树状数组做,但树状数组是以数据的大小为下标,时间复杂度为O(n log n)(n=max(a[i])),总体来说还是归并好一些。#include#includeint a[200005],b[200005],n,t;int i;long long ans;void count(in...
分类:
其他好文 时间:
2015-03-08 18:32:55
阅读次数:
105
归并排序的核心思想是将两个已经排序的序列合并成一个序列,那如何得到两个已经排序的序列呢?我们知道, 如果一个序列只有一个元素,那该序列是已经排序的,这样我们就可以利用分治的思想,将未排序的序列划分成更小的序列,只到我们可以很方便的对小序列进行排序(比如划分到序列只有一个元素, 或者序列很小可以方便的使用其它排序算法进行排序),然后再将小序列逐次合并,得到最后的排序结果。
#include
...
分类:
编程语言 时间:
2015-03-08 14:21:55
阅读次数:
200