分治法之归并排序
来源:互联网 发布:淘宝骗术大全 编辑:程序博客网 时间:2024/06/03 16:01
先上图:
归并排序的关键:
1.将待排序的数组分割,一直分到只有一个数.(那么这个数必然是排好序的)。
2.将分割后的原子级别的数两两合并,最后产生结果,并填充到原数组中!
#include <iostream>using namespace std;int a[100];int n;//数组长度 void merge(int arr[],int L,int M,int R){ //M为分割位置,M的左边为排好序的,M以及M的右边也是排好序的 int left_size=M-L;//左序列数组大小 int right_size=R-M+1;//右序列数组大小 int left[left_size];//存储左序列 int right[right_size];//用于存储右序列 for(int i=L;i<M;i++){ left[i-L]=a[i];//填充左数组 } for(int i=M;i<=R;i++){ right[i-M]=a[i];//填充右数组 } int i=0;int j=0;int k=L; while(i<left_size&&j<right_size){ if(left[i]<right[j]){ a[k++]=left[i++]; } else{ a[k++]=right[j++]; } } while(i<left_size){ a[k++]=left[i++]; } while(j<right_size){ a[k++]=right[j++]; }}int mergeSort(int arr[],int L,int R){ if(L==R){//递归的终止条件 return 0; } else{ int M=(L+R)/2;//取分割位置 mergeSort(a,L,M);//递归划分数组左序列 mergeSort(a,M+1,R);//递归划分数组右序列 merge(a,L,M+1,R);//数组合并操作 }}int main() { cout<<"请输入要排序的数组大小:"<<endl; cin>>n; cout<<"请输入要排序的数组:"<<endl; for(int i=0;i<n;i++){ cin>>a[i]; } mergeSort(a,0,n-1); for(int i=0;i<n;i++){ cout<<a[i]<<" "; } return 0;}
阅读全文
0 0
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序
- 分治法之归并排序算法
- 分治法之二路归并排序
- [Algorithm_Learn_02]分治法之归并排序
- 分治法之归并排序1
- 【算法】分治法之归并排序实现
- 算法储备之归并排序(分治法)
- 分治法,归并排序
- 分治法-归并排序
- 分治法-归并排序
- 归并排序-分治法
- 分治法 - 归并排序
- 分治法--归并排序
- 归并排序 分治法
- 吴恩达深度学习笔记(一)week3 浅层神经网络
- Python简单爬虫——淘宝数据
- Linux逻辑卷管理(LVM)详细教程
- 2-Java IO与装饰模式
- centos7安装python3.5
- 分治法之归并排序
- 操作系统基本概念-操作系统学习笔记一
- 【Spring Cloud】Eureka服务注册中心搭建
- 生成随机数函数
- SQL语句中外键和主键的删除、添加方法
- BZOJ 1050 [HAOI2006]旅行comf(并查集)
- 开发中的各种小工具收集
- 【转载】梯度下降法(一)入门
- l2222222222222222222222