c++实现的归并排序算法
来源:互联网 发布:生久网络 编辑:程序博客网 时间:2024/04/28 12:26
**对数组[0,n)排序**
#include <iostream>#include <cstring>using namespace std;void marge_sort(int *a,int x,int y,int *b) //a是要排序的数组,b是临时数组{ if(y-x>1) //要排序的数组元素大于等于两个 { int mid=(x+y)>>1; //二分 int i=x,j=mid,p=x; marge_sort(a,x,mid,b); //对前半区间递归排序 marge_sort(a,mid,y,b); //对后半区间递归排序 while(i<mid||j<y) { if(j>=y||(i<mid&&a[i]<=a[j])) b[p++]=a[i++]; else b[p++]=a[j++]; } for(i=x;i<y;i++) a[i]=b[i]; }}void print(int *a,int n){ cout<<"排序后的数组为:"<<endl; for(int i=0; i<n; i++) cout<<a[i]<<ends; cout<<endl<<endl<<endl;}int main(){ int n,i; cout<<"输入数组元素个数(以0为结束): "; while(cin>>n&&n) { int *a=new int[n]; int *b=new int[n]; memset(b,0,n*sizeof(int)); cout<<"依次输入数组元素: "; for(i=0;i<n;i++) cin>>a[i]; marge_sort(a,0,n,b); print(a,n); delete []a; delete []b; cout<<"输入数组元素个数(以0为结束): "; } return 0;}
函数中while语句中的判断条件巧妙运用了短路运算符“||”
不理解的话可以换成如下语句
while(i<mid||j<y){ if(i>=mid) b[p++]=a[j++]; else if(j>=y) b[p++]=a[i++]; else if(a[i]<=a[j]) b[p++]=a[i++]; else b[p++]=a[j++];}
0 0
- C语言归并排序算法的实现
- 归并排序的实现(排序算法c语言描述)
- 排序算法的C语言实现-归并排序
- 排序算法(C实现)-------- 归并排序
- 排序算法C++&&Python实现---归并排序
- 排序算法C++&&Python实现---归并排序
- 归并排序的算法实现
- 归并排序算法的实现
- 归并排序算法的实现
- 归并排序的算法实现
- 归并排序的算法实现
- 归并排序算法的实现
- linux下归并排序(MergeSort)算法的C语言实现
- 算法导论 - 归并排序的 C 语言实现
- 归并排序的C语言实现【严蔚敏+算法导论】
- 经典算法之归并排序的C实现方法
- 【算法】归并--C语言实现归并排序递归算法
- 归并排序算法 C代码实现
- 正则表达式 分组获取
- HTML的16个全局属性
- Spring详解
- 黑马程序员---Java基础---多态
- redhat7.2 内核安装笔记
- c++实现的归并排序算法
- centos下mysq5.1.73安装并配置主从
- std::forward 完美转发
- linux用户和用户组管理
- 织梦动态无法更新bug
- python基础教程共60课-第26课操作list
- poj 2503(字符串hash)
- shell之test
- 启动工程时总会报一些奇葩的问题,Failed to read candidate component class,Caused by: java.lang.IncompatibleClassChang