该程序旨在合并两个数组并将它们放入一个输出数组中。我所拥有的代码如下:
此外,必须使用指针符号而不是数组符号(我希望...)
void Merge(int *arr1, int *arr2, int *output, int arr1size, int arr2size) {
int arr2count = 0, arr1count = 0;
while (arr1count < arr1size) {
if (arr2count >= arr2size) { /* dump arr1 because arr2 is done */
*output++ = *arr1++;
arr1count++;
}
else if (*arr1 < *arr2) {
*output++ = *arr1++;
arr1count++;
}
else {
*output++ = *arr2++;
arr2count++;
}
}
while (arr2count++ < arr2size) { /* dump arr2 */
*output++ = *arr2++;
}
}
如何使这个更有效率?我的意思是,尽可能地削减代码以使其稍微更有效率。
举例来说,可以考虑下面所示的三重 while 循环实现方式不够高效。
while (arr1count < arr1size && arr2count < arr2size) { .... }
while (arr1count < arr1size) { .... }
while (arr2count < arr2size) { .... }
此外,必须使用指针符号而不是数组符号(我希望...)
restrict
关键字,让编译器知道arr1
,arr2
和output
三个数组不会相互重叠。 - fuz