算法之归并排序算法
来源:互联网 发布:网络嘿嘿嘿是什么意思 编辑:程序博客网 时间:2024/04/29 18:45
介绍归并排序之前,先讲一下实现归并排序所运用的运用的方法----分治法。
许多有用的算法在数据结构上是递归的:为了解决一个给定的问题,算法一次或多次用其自身来解决紧密相关的若干子问题。这些算法典型地遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归的求解这些子问题,然后再合并这些子问题的解来建立原问题的解。
分治模式在每层递归中都有三个步骤:
分解原问题为若干个子问题,这些子问题是原问题规模较小的实例。
解决这些子问题,递归求解各子问题。然而,若子问题的规模足够小,则直接求解。
合并这些子问题的解成原问题的解
归并排序算法完全遵循分治模式。
分解:分解待排序的n个元素的序列成各具有n/2个元素的两个子序列
解决:使用归并排序递归的排序两个子序列。
合并:合并两个已经排序好的子序列以产生已排序的答案。
伪代码:
MERGE(A,p,q,r) n1 = q -p + 1; n2 = r - q; let L[1..n1+1] and R[1..n2+1] be new arrays for i = 1 to n1 L[i] = A[p + i -1] for j = 1 to n2 R[j] = A[q+j] L[n1 + 1] = infinity R[n2 + 1] = infinity i = 1 j = 1 for k = p to r if L[i] <= R[j] A[k] = L[i] i = i + 1 else A[k] == R[j] j = j + 1MERGE-SORT(A,p,r) if p < r q = (p + r) /2 MERGE-SORT(A,p,q) MERGE-SORT(A,q+1,r) MERGE(A,p,q,r)
C语言的算法实现:
void merge(int A[], int p, int q, int r){ int n1 = q-p+1; //分成2个数组后左边数组的大小 int n2 = r - q; //右边数组的带大小 int L[n1+1]; int R[n2+1]; int i,j; for(i=0;i<n1;i++) //将数组中的元素放入L和R数组中 L[i] = A[p+i]; for(j=0;j<n2;j++) R[j] = A[q+j+1]; L[n1] = INFINTY; //设置哨兵,避免当L,R为空的情况,简化代码 R[n2] = INFINTY; i=0; j=0; int k; for(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); }}
测试例子:
int main(){ int A[] = {5,4,6,8,9,7,3,1}; merge_sort(A, 0, 7); int i; for(i=0;i<8;i++) printf("%d ",A[i]); return 0;}
0 0
- 排序算法之归并
- 算法之归并排序
- 排序算法之归并
- 算法之归并排序
- 算法之归并排序
- 算法之归并排序
- 算法之归并排序
- 算法之归并排序
- 算法之归并排序算法
- 排序算法之归并算法
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 排序算法之归并排序
- 怎样在cmd(命令提示符)下快速进行复制粘贴操作
- android自动化测试中hierarchyviewer和uiautomatorviewer获取控件信息的方式比对(1)
- 健身历程2
- Android APP卸载守护,双APP相互守护 - 老牟的个人页面 - 开源
- 双链表的实现
- 算法之归并排序算法
- 如何选择开源许可协议
- 用JavaScript实现JavaScript文件的版本管理和加载 - zero2hero的个人页面 - 开源
- 机器学习常见算法分类汇总
- 将已有的Android从Eclipse手动迁移到Android Studio(不用gradle)
- 杂记
- 参数类型推断 以及 柯里化 - 记录 - 开源
- 使用ssh-keygen和ssh-copy-id三步实现SSH无密码登录
- [DFS]poj2676(2918)