69,382
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
void MERGE(int *A,int p,int q,int r);
void MERGE_SORT(int *A,int p,int r);
int main()
{
int a[5]={1,5,7,8,4};
int i;
MERGE_SORT(a,0,4);
for(i=0;i<5;i++)
{
printf("%d ",a[i]);
}
return 0;
}
void MERGE(int *A,int p,int q,int r)
{
int L[3],R[3];
int i,j,k;
for(i=0;i<=r;i++)
{
if(i<=q)
L[i]=A[i];
else
R[i-q-1]=A[i];
}
if((r/2)*2!=r)
{
j=(r-1)/2;
k=(r-1)/2;
}
else
{
j=r/2;
k=(r-1)/2;
}
for(i=r;i>=0;i--)
{
if(L[j]>=R[k])
{
A[i]=L[j];
j-=1;
}
else
{
A[i]=R[k];
k-=1;
}
}
//printf("%d,%d\n",L[0],L[1]);
//printf("%d,%d\n",R[0],R[1]);
}
void MERGE_SORT(int *A,int p,int r)
{
int q;
if(p<r)
{
q=r/2;
MERGE_SORT(A,p,q);
MERGE_SORT(A,q+1,r);
MERGE(A,p,q,r);
}
if(p>=r)
MERGE(A,p,q,r);
}
public void MergerSort(int[] v, int first, int last)
{
if (first + 1 < last)
{
int mid = (first + last) / 2;
MergerSort(v, first, mid);
MergerSort(v, mid, last);
Merger(v, first, mid, last);
}
}
你看看有什么不同#include<stdio.h>
#include<stdlib.h>
void MERGE(int *A,int p,int q,int r,int m);
void MERGE_SORT(int *A,int p,int r);
int main()
{
int i = 0;
int a[6]={9,2,8,4,5,6};
MERGE_SORT(a,0,5);
for(;i<6;i++)
{
printf("%d\n",a[i]);
}
return 0;
}
void MERGE(int *A,int p,int q,int r,int m){
int i,j,k;
int *b = (int *) malloc (sizeof(int)*m);
i = p;
j = q+1;
k = 0;
while(i<=q&&j<=r)
{
if(A[i]>A[j])
{
b[k++] = A[j++];
}
else
b[k++] = A[i++];
}
if(i==q+1)
{
for(;j<=r;j++)
b[k++] = A[j];
}
else
{
for(;i<=q;i++)
{
b[k++] = A[i];
}
}
k=0;
for(i=p;i<r+1;i++)
A[i]=b[k++];
free(b);
}
void MERGE_SORT(int *A,int p,int n){
if(p<n){
int q;
q=(n+p)/2;
MERGE_SORT(A,p,q);
MERGE_SORT(A,q+1,n);
MERGE(A,p,q,n,n-p+1);
}
}
#include<iostream.h>
void MERGE(int *A,int p,int q,int r,int m);
void MERGE_SORT(int *A,int p,int r);
int main()
{
int i = 0;
int a[5]={1,5,7,8,4};
MERGE_SORT(a,0,4);
for(;i<5;i++)
cout<<a[i]<<endl;
return 0;
}
void MERGE(int *A,int p,int q,int r,int m){
int i,j,k;
int *b = new int[m];
i = p;
j = q+1;
k = 0;
while(i<=q&&j<=r)
{
if(A[i]>A[j])
{
b[k++] = A[j++];
}
else
b[k++] = A[i++];
}
if(i==q+1)
{
for(;j<=r;j++)
b[k++] = A[j];
}
else
{
for(;i<=q;i++)
{
b[k++] = A[i];
}
}
k=0;
for(i=p;i<r+1;i++)
A[i]=b[k++];
delete b ;
}
void MERGE_SORT(int *A,int p,int n){
if(p<n){
int q;
q=(n+p)/2;
MERGE_SORT(A,p,q);
MERGE_SORT(A,q+1,n);
MERGE(A,p,q,n,n-p+1);
}
}