读书人

合并排序错哪了求指导

发布时间: 2013-06-25 23:45:41 作者: rapoo

合并排序哪里错了求指导

#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++;
}

}

}

[解决办法]

line 66,67

i=start; j=start;

初始化错了,应该是

i=0; j=0;

[解决办法]
66-81行,三个地方错误:
    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++;
}

}

读书人网 >C语言

热点推荐