c++实现的归并排序算法
2015-12-10 16:22
351 查看
**对数组[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 ; int *b=new int ; 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++]; }
相关文章推荐
- VS2012环境下C++连接mysql数据库
- C++设计模式之Singleton
- c语言之sizeof
- 转 夕甲甲:孔乙己之 C++ 版
- C++关键字explict的详解和使用
- 选择排序C++实现
- 【ThinkingInC++】61、非成员运算符
- C++ Primer Plus第六版 第十五章 编程练习答案
- C++中的强制类型转换
- C++ 10模板方法模式
- C++库一览
- c++获取屏幕大小
- c++管理对象之间动态的多重连接
- C++ 判断char* 是否为空
- C++多态性
- C++11 学习笔记 基于范围的for循环
- 推荐C++ Primer 第五版
- C++获取可使用的COM口列表
- Cpp--STL的组成
- Effective C++ 一个简单的 String 类的 Reference Counting 实现(C++)