c++実装の集計ソートアルゴリズム

2918 ワード

                                **   [0,n)  **
#include 
#include 
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(iif(j>=y||(ielse b[p++]=a[j++];
        }
        for(i=x;ivoid print(int *a,int n)
{
    cout<<"       :"<for(int i=0; icout<cout<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;icin>>a[i];
marge_sort(a,0,n,b);
print(a,n);
delete []a;
delete []b;
cout<<「    の  を  (0で  ):」;
}
return 0;
}

関数中のwhile文の判断条件は短絡演算子"|"を巧みに用いているが理解しなければ次のような文に置き換えることができる
while(iif(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++];
}