归并排序
来源:互联网 发布:生物信息 知乎 编辑:程序博客网 时间:2024/06/15 16:51
分治法
将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
归并排序
利用分治法的思想,将待排序的元素递归的分成两个子问题解决,然后将这些子问题的解合并,得到排序的结果。
合并操作:将A[ p, q],A[ q+1, r]合并到A
const int maxn = 1010;const int INF = 100000000;int L[maxn], R[maxn];void Merge(int A[], int p, int q, int r){ int n1 = q - p + 1; int n2 = r - q; for (int i = 0; i < n1; i++){ L[i] = A[p + i]; } for (int j = 0; j < n2; j++){ R[j] = A[q + 1 + j]; } L[n1] = INF; R[n2] = INF; int i = 0, j = 0; for (int k = p; k <= r; k++){ if (L[i] <= R[j]){ A[k] = L[i]; i++; } else{ A[k] = R[j]; j++; } }}
归并排序:
void Merge_Sort(int A[], int p, int r){ if (p < r){ int q = (p + r) / 2; Merge_Sort(A, p, q); Merge_Sort(A, q + 1, r); Merge(A, p, q, r); }}
算法复杂度
如归并排序的图所示,归并排序每次都将待排的数组均分为L和R两个,
如此,假设对一个元素的操作时间是c,我们可以得到一个地归树:
已知有n个叶子结点的完全二叉树的高度为lg n,所以,我们得知归并排序的算法时间复杂度为O(nlg n)。
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- session详解
- Uva 156 Ananagrams
- 欢迎使用CSDN-markdown编辑器
- nyoj 993 How many integers can you find <水>
- 读取Cookie及Cookie所有属性操作方法,Cookie大小
- 归并排序
- bzoj 3218: a + b Problem|最小割|主席树
- 白话(whitening)
- JavaEE中response.setContentType方法的使用
- 让Android Studio的智能感知不区分大小写
- POJ 1459 —— Power Network
- crontab转载,未实现
- 一、Spring-boot设置restful
- 【neutron】mitaka版本openstack网络之linux bridge