合并排序算法
来源:互联网 发布:穆雅斓淘宝店铺链接 编辑:程序博客网 时间:2024/06/01 22:06
算法hebingpaixu函数的递归过程只是将待排序的集合一分为二,直至待排序集合只剩下1个元素为止。
然后不断的合并2个排好序的数组段。(它可以和快速排序时间复杂度一致)
举个例子,大致是按这样的情况进行的
初始序列[8] [4] [5] [6] [2] [1] [7] [3]
归并到b [4 8] [5 6] [1 2] [3 7]
复制到a [4 8] [5 6] [1 2] [3 7]
归并到b [4 5 6 8] [1 2 3 7]
复制到a [4 5 6 8] [1 2 3 7]
归并到b [1 2 3 4 5 6 7 8]
复制到a [1 2 3 4 5 6 7 8]
#include<iostream> #include<conio.h> #include<cstdlib> using namespace std; void hexinsuanfa(int a[],int b[],int l,int mid,int r) { int La,Lb,i; La = Lb = l;//La,Lb分别是a,b数组的左边界 i=mid+1; while((La<=mid)&&(i<=r)) { if(a[La]<=a[i]) b[Lb++] = a[La++]; else b[Lb++] = a[i++]; } if(La>mid) { for(int j = i;j<=r;j++) b[Lb++] = a[j]; } else for(int j = La;j<=mid;j++) b[Lb++] = a[j]; } void hebingpaixu(int a[],int left,int right,int n) { int i; int *b = new int[n]; if(left<right) { i = (right + left)/2; hebingpaixu(a,left,i,n);//把左半边切割 hebingpaixu(a,i+1,right,n);//把左右半边切割 hexinsuanfa(a,b,left,i,right);//把切割后排好序的个个a数组归并到b中 for(int j = left;j<=right;j++) { a[j] = b[j]; //把b数组归并到a中 } } } int main() { int n,i=0,j=0; cout<<"输入你要排序的数组大小:"; cin>>n; int *hr = new int[n]; cout<<"输入你要排序的数组内容:"<<endl; for(i=0;i<n;i++) cin>>hr[i]; hebingpaixu(hr,0,n-1,n); for(i=0;i<n;i++) cout<<hr[i]<<' '; cout<<endl; getch(); return 0; }
- 排序算法---合并排序
- 排序算法-合并排序
- 合并排序算法
- 合并排序算法
- 算法-----合并排序
- java 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序算法
- 合并排序 算法实现
- c++合并排序算法
- 合并排序算法
- javascript 合并排序算法
- 合并排序算法
- 合并排序算法
- 算法之合并排序
- 合并排序算法
- 合并排序算法
- Linux lcd 帧缓冲驱动详解
- 明晰软件架构与数据结构
- Android系统在超级终端下必会的命令大全
- android常用烧录命令
- Android应用程序键盘(Keyboard)消息处理机制分析(三)
- 合并排序算法
- .Net开发人员常犯的6大安全错误
- XML学习记录之XML-DOM
- 工作那些事
- ORACLE函数大全
- o.boj 1066 SPOJ
- Android应用程序键盘(Keyboard)消息处理机制分析(四)
- 关于Ubuntu给新手的配置
- SEO学习资源