【发布时间】:2018-04-19 07:23:30
【问题描述】:
我想出了这个
int p = 0, r = SEIZE-1, i, j, k;
int q = (p + r)/2;
int n1 = q-p+1, n2 = r-q;
float A[SEIZE] = { 125.6, 67.2, 3.21, 422, 54, 87 }, L[n1], R[n2];
printf("{ ");
for( k = 0 ; k < SEIZE ; k++ ){
printf("%.1f ", A[k]);
}
printf(" }\n");
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] = '\0';
R[n2] = '\0';
i = 0;
j = 0;
for( k = p ; k <= r; k++ ){
if( L[i] <= R[j] ){
A[k] = L[i];
i = i+1;
}
else{
A[k] = R[j];
j = j+1;
}
}
printf("{ ");
for( k = 0 ; k < SEIZE ; k++ ){
printf("%.1f ", A[k]);
}
printf(" }\n");
第一组数字是未排序的,第二组应该是 排序的,但如您所见,算法没有对其进行排序;我认为问题源于错误地尝试将书中的 base-1 数组转换为 C 的 base-0,但我不太确定。你能帮我找出问题吗?
提前致谢。
【问题讨论】:
-
能贴出完整的代码吗?
标签: c algorithm sorting merge mergesort