归并排序
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide
and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
归 并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r...
分类:
编程语言 时间:
2015-04-30 18:21:40
阅读次数:
133
以为是分治法那个经典的例子,一看题才知道是大数棋盘覆盖时间限制:3000ms|内存限制:65535KB难度:3描述在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要..
分类:
其他好文 时间:
2015-04-29 15:19:57
阅读次数:
142
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。讲已有有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序列段间有序。
归并操作的工作原理(将二个有序数列合并):
第一步:申请空间,使其大小为已经排序序列之和,该空间用来存放合并后的序列。
第二步:设定两个指针,最初为之分,最初位置分别为两个已经排序序列的起始位置。
第三步:比较两个指...
分类:
编程语言 时间:
2015-04-28 11:43:44
阅读次数:
147
查询与排序是使用的再频繁不过的两个功能,实现语言为C#。记录了最基本的查询与排序的方法。
分类:
编程语言 时间:
2015-04-26 19:31:37
阅读次数:
242
分治法:将原问题分解为规模比较小的几个子问题,递归的求解子问题的解,然后利用这些子问题的解来建立原问题的解。归并排序的也完全遵循分治模式:分解:分解待排序的n个元素的序列为n/2个元素的两个子序列;解决:使用归并排序递归的排序两个子序列;合并:合并两个子序列得到答案借用一张原理图帮助理解,从上往下看...
分类:
编程语言 时间:
2015-04-26 16:29:43
阅读次数:
161
归并排序(Merge sort)是创建在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
归并操作
归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。算法描述
归并操作的过程如下:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
设定两个指针,最初...
分类:
编程语言 时间:
2015-04-24 16:28:48
阅读次数:
141
//快速排序,第一步确定一个关键值key(一般设置为第一个元素),一次快排基本思路是将比key小的数放在key的左边将比key大的数放在key右边,于是完成一次快排接下来对key左边和右边分别递归采用同样方法算法步骤: 1.选择一个基准key(一般选第一个元素) 2设定两个指针low和high,初始...
分类:
其他好文 时间:
2015-04-23 21:35:08
阅读次数:
183
利用快速排序的思想·去做#includeusing namespace std;int FindKthMax(int*list, int left, int right, int k);int main(){ int i,n,k; while (cin >> n){ int *a = new in....
分类:
其他好文 时间:
2015-04-23 21:33:26
阅读次数:
146
Quicksort(快速排序)是由东尼·霍尔所发展的一种排序。它比其他的Ο(nlogn)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。当然,本文是JavaScript实现。算法排序算法使用分治法 (Divide and conquer)把一个序列(lis...
分类:
编程语言 时间:
2015-04-23 19:25:15
阅读次数:
145
将数组a[i:j]一分为二,找出前半部分最大值,找出后半部分最大值,总合结果#includeusing namespace std;void findMax(int a[], int i, int j, int &max);int main(){ int a[100]; int n, i; whil...
分类:
其他好文 时间:
2015-04-22 00:18:22
阅读次数:
111