分治法——归并排序
来源:互联网 发布:淘宝 排名 编辑:程序博客网 时间:2024/06/04 23:20
分治法是解决一类问题的思想。所谓“分治”,就是分而治之,它有三个步骤:分解、解决与合并,将一个大问题分解成若干的小问题,使用递归的思想逐步解决。典型的例子就是合并排序。
#include<iostream>using namespace std;void merge(int a[],int p,int q,int r){int const max=10000;int i,j,k,L[100],R[100];int n1=q-p+1;int n2=r-q;for(i=0;i<n1;i++)L[i]=a[i+p];for(i=0;i<n2;i++)R[i]=a[q+i+1];L[n1]=max;R[n2]=max;i=0;j=0;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 i,a[100],n;cin>>n;for(i=0;i<n;i++)cin>>a[i];merge_sort(a,0,n-1);for(i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;return 0;}其实合并还有一种思路,就是不使用max,当L数组或R数组全部复制到a数组后,立刻停止,把另一个数组余下元素复制到a数组。
0 0
- 分治法—归并排序
- 分治法——归并排序
- 分治法算法——归并排序
- 分治法——归并排序
- 分治归并——排序
- 分治——归并排序
- 分治策略—归并排序
- 分治法,归并排序
- 分治法-归并排序
- 分治法-归并排序
- 归并排序-分治法
- 分治法 - 归并排序
- 分治法--归并排序
- 归并排序 分治法
- 归并排序--分治法
- 分治法 & 归并排序
- 分治法-归并排序
- 分治法-归并排序
- 介绍自己
- HTML 属性参考手册
- Query 1.9 移除了 $.browser 的替代方法
- 路由器级联方式(二级路由为例)
- 稀疏表示人脸识别
- 分治法——归并排序
- 编辑文章 - 博客频道 - CSDN.NET
- hdu 2204
- hdu1253BFS入门
- HNU12884_Area Coverage(扫描线/线段树+离散化)
- 在汉澳sinox2014建立ZFS高可靠文件存储系统
- HDU 4951
- windows编程--动态加载光标和图标
- JSON学习