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
原创粉丝点击