归并排序(递归与分治)
2015-08-05 17:24
232 查看
#include <stdio.h> #include <stdlib.h> void mer (int a[],int l,int m,int r ) //合并函数 { int i,j,k; int n1=m-l+1; int n2=r-m; int *f,*b; f=(int *) malloc (n1*sizeof (int)); b=(int *) malloc (n2*sizeof (int)); for (i=0;i<n1;i++) f[i]=a[l+i]; for (i=0;i<n2;i++) b[i]=a[m+i+1]; i=0;j=0;k=l; while (i<n1 && j<n2) // 比较完全拆分后数的大小 { if (f[i]<b[j]) a[k++]=f[i++]; else a[k++]=b[j++]; } while (i<n1) a[k++]=f[i++]; while (j<n2) a[k++]=b[j++]; } void sort (int a[],int l,int r) //将数组拆分(递归) { int m; m=(l+r)/2; if (l<r) { sort (a,l,m); sort (a,m+1,r); mer (a,l,m,r); } } int main () { int a[100]; int n,i; scanf ("%d",&n); for (i=0;i<n;i++) scanf ("%d",&a[i]); sort (a,0,n-1); for (i=0;i<n;i++) printf ("%d ",a[i]); printf ("\n"); return 0; }
相关文章推荐
- SQLServer获取最后插入的ID值SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY的比较
- CodeForce 484B:(最大余数)
- <已解决> Eclipse启动失败
- Code Sign error: No matching provisioning profile found: Your build settings specify a provisioning
- UI012---字典转模型
- 几种常见的排序算法及其复杂度——冒泡排序(一)
- proguard介绍
- hdu 5348 MZL's endless loop 欧拉回路
- 织梦数据库导入提示USING BTREE 错误的解决办法
- leetcode Valid Anagram 异位体
- DB导入、导出数据
- hdu 5348 MZL's endless loop 欧拉回路
- 集训第四周(高效算法设计)K题 (滑窗问题)
- Emmet 生成 HTML 的语法
- 迷宫城堡
- HDU1181:变形课 【dfs】
- 图解sql join
- 大明A+B
- android 自定义组合控件总结(两个Button点击切换)
- 关于SQL Server的WITH(NOLOCK)和(NOLOCK)