首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

合并排序错哪了求指导

2013-06-25 
合并排序哪里错了求指导#include stdio.h#define N 8#define MAX 65535void merge(int test[],int start

合并排序哪里错了求指导

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

热点排行