69,377
社区成员
发帖
与我相关
我的任务
分享
#include "stdio.h"
#define N 8
#define MAX 65535
void merge(int test[],int start,int middle,int end);
void merge_sort(int test[],int start,int end);
int main(void)
{
int i,test[N]={12,14,52,3,1,63,25,8};
for(i=0;i<N;i++)
printf("%d\t",test[i]);
printf("\n");
merge_sort(test,0,N-1);
for(i=0;i<N;i++)
printf("%d\t",test[i]);
}
void merge_sort(int test[],int start,int end)
{
int t;
if(start< end)
{
t = ( start + end ) >> 1;
merge_sort( test, start, t );
merge_sort( test, t+1, end);
merge(test, start, t, end);
}
}
/*
*****************************************************************
******:函数功能:实现2个有序数组的合并
******:函数名 :merge(int test[],int p,int t,int r)
******:入口参数:test[]待排序数组,p数组开始位置,t数组中间分隔位置,r数组末尾位置
******:返回值 :无
*/
void merge(int test[],int start,int middle,int end)
{
int temp1[N]={0},temp2[N]={0};//定义并初始化辅助数组
int i,j,k;
int n1; //设置辅助数组1大小
int n2; //设置辅助数组2大小
n1=middle-start+1; //设置辅助数组1大小
n2=end-middle; //设置辅助数组2大小
for(i=0; i<n1; i++)
temp1[i]=test[start+i];
for(j=0; j<n2; j++)
temp2[j]=test[middle+j+1];
temp1[n1] = MAX; //给数组末尾赋予极大值方便操作
temp2[n2] = MAX;
i=start;
j=start;
for( k=start ;k<end ;k++ )
{
if( ( temp1[i] < temp2[j]) )
{
test[k]=temp1[i];
i++;
}
else
{
test[k]=temp2[j];
j++;
}
}
}
i=0; // 1、初始化错误
j=0; // 2、初始化错误
for( k=start ;k<=end ;k++ ) // 3、K结束判断错误
{
if( ( temp1[i] < temp2[j]) )
{
test[k]=temp1[i];
i++;
}
else
{
test[k]=temp2[j];
j++;
}
}
i=start; j=start;
初始化错了,应该是
i=0; j=0;