终于解决了一直以来困扰的合并排序问题,结果发现是自己太弱了,当时没有搞懂的就是两个已经排号序列的数组怎么合起来,其实就是一个互相比较的过程。贴上代码如下:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
void Merge(int *A,int p,int q,int r)
{
int i,j,k;
int n1=q-p+1;
int n2=r-q;
int* L = (int*)malloc(sizeof(int)*(n1+1));
int* R = (int*)malloc(sizeof(int)*(n2+1));
for(i=0;i<n1;i++)
{
L[i]=A[p+i];
}
for(j=0;j<n2;j++)
{
R[j]=A[q+j+1];
}
L[n1]=10;
R[n2]=10;
i=0;
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 merge_list(int* A,int p,int r)
{
if(p<r)
{
int q=(p+r)/2;
merge_list(A, p, q);
merge_list(A, q+1, r);
Merge(A,p,q,r);
}
}
int main(int argc, const char * argv[])
{
// insert code here...
std::cout << "Hello, World!\n";
int a[8]={0,1,2,3,4,5,6,7};
/*for(int i=0;i<8;i++)
{
cout<<a[i]<<endl;
}*/
merge_list(a,0,7);
for(int i=0;i<8;i++)
{
cout<<a[i]<<endl;
}
return 0;
}