以下是最近学习各种算法的代码实现:#include #include #include #include typedef int EleType;typedef int (*CompFunc)(void *,void *);int IntComp(void * a,void *b){ if(*...
分类:
其他好文 时间:
2014-07-08 00:15:54
阅读次数:
293
1 #include 2 void MERGE(int *A,int p,int q,int r){ 3 int i,j,k; 4 int *B=malloc((r-p+1)*sizeof(int)); 5 i=p;j=q+1;k=0; 6 while(i<=q&&...
分类:
其他好文 时间:
2014-07-02 21:04:07
阅读次数:
155
(一)归并排序
分析:
(1)划分问题:把序列分成元素个数尽量相等的两半。
(2)递归求解:把两半元素分别排序。
(3)合并问题:把两个有序表合并成一个。(每次只需要把两个序列的最小元素加以比较,删除其中的较小元素并加入合并后的新表)
#include
using namespace std;
const int MAXN = 1000;
int A[MAXN], T[MAXN];
...
分类:
其他好文 时间:
2014-07-02 09:22:26
阅读次数:
243
Sorted Array:Given two sorted integer arrays A and B, merge B into A as one sorted array.Note:You may assume that A has enough space (size that is gre...
分类:
其他好文 时间:
2014-07-01 12:51:53
阅读次数:
202
第一章:
磁盘排序:对于一个提出的问题,不要未经思考就直接给出答案。要先深入研究问题,搞清楚这个问题的特点,根据这个特点,可能有更好的解决方案。
比如:文中:最初的需求只是“我如何对磁盘文件排序”。
我们首先想到了经典的归并排序。
但,进一步了解到排序的内容是10000000个记录,每条记录都是一个7位整数,且只有1M可用的内存。每条记录不相同。
【位示图法,详见我的关于排序...
分类:
其他好文 时间:
2014-07-01 09:09:46
阅读次数:
230
排序算法基本陈述容易理解,之后会详细解析希尔排序、堆排序、归并排序、快速排序、简单选择排序、直接插入排序等排序算法。...
分类:
其他好文 时间:
2014-07-01 06:37:39
阅读次数:
188
归并排序:
归并操作,也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。
归并操作的过程如下:
(1) 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
(2) 设定两个指针,最初位置分别为两个已经排序序列的起始位置
(3) 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
(4) 重复步骤3直到某一指针到达序列尾
(5) 将另一序列剩下的所有元素直接复制(抄)到合并序列尾...
分类:
编程语言 时间:
2014-06-30 18:48:23
阅读次数:
203
题目链接:http://poj.org/problem?id=2299
题目大意:求出排序过程中的最小交换次数
利用归并排序的分治算法解决此题。
代码:
#include
#include
#include
#define N 500001
using namespace std;
int a[N];
int temp[N];
long long ans;
void merge(in...
分类:
其他好文 时间:
2014-06-30 08:18:11
阅读次数:
230
题目描述:给定数组,求逆序对的个数思路:归并排序,归并的时候改变计数,当前面的元素比后面元素大则计数cnt+=(m-i)+1没有AC的版本 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #inclu...
分类:
其他好文 时间:
2014-06-28 09:56:28
阅读次数:
215
归并排序(Merge Sort)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。
归并排序的具体做法:
把原序列不断地递归等分,直至每等份只有一个元素,此时每等份都是有序的。
相邻等份合并,不断合并,直至合并完全。
二路归并
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序最常用的是二路归并,即把两个小的有序的序列和并成一个大的有序序列:合二为一...
分类:
其他好文 时间:
2014-06-27 10:16:41
阅读次数:
315