算法代码(2)——分治法排序

#include

#include<time.h>

using namespace std;

#define NUM 100

#define MAX 65535

void merge(int A[],int p, int q, int r)

{

int n1 =q-p+1;

int n2 =r-q;

int i,j,k;

int L[NUM],R[NUM];

for(i=0; i<n1; i++)

        L[i] = A[p+i];

for(j=0; j<n2; j++)

R[j]=A[q+j+1];

     

    L[i] = MAX;

R[j] = MAX;

i=j=0;

for(k=p; k<=r;k++)

{

if(L[i]<=R[j] )

A[k] = L[i];

i++;

}else 

{

            A[k] = R[j];

j++;

}

}

}

void MergeSort(int A[],int p,int r)

{

int q;

     if(p<r)

{

       q=(p+r)/2;

  MergeSort(A,p,q);

  MergeSort(A,q+1,r);

  merge(A,p,q,r);

}

}

void main()

{

int A[]= { 4,2,6,5,8,3,7};

int i,j;

for( i=0;i<7;i++)

cout<<A[i]<<endl;

MergeSort(A,0,6);

cout<<“after sort”<<endl;

for( i=0;i<7;i++)

cout<<A[i]<<endl;

     

}

点赞