【发布时间】:2021-12-18 00:02:04
【问题描述】:
我被要求制作一个交换数组中两个部分的函数。
类似的,
array[] = {1 , 2, 5, 7, 8, a , b, c}
| |
sections: First Second
签名是void reverse_reg(int *arr, int s, int k, int j),其中arr是数组,s是第一节的第一个索引,k是第一节的最后一个索引,j表示第二节的结尾部分,开始是k(因为C中的索引从0开始)
到目前为止,我有类似的东西,
void reverse_reg(int *arr, int s, int k, int j)
{
for (int i = s; i < j; i++)
{
if (i > k / 2) /* swap the rest */
{
swap(&arr[i], &arr[j - i + 1]); /* this is wrong */
}
else
{
swap(&arr[i], &arr[k + i + 1]);
}
}
}
我已经测试了else 块,到目前为止它成功地交换了第二部分,生成,
result:
a b c 7 8 1 2 5
尽管如此,我还没有找到交换第二部分的方法,因为 if 块产生了完全错误的东西(这是有道理的),这让我认为最初的逻辑是错误的。有什么提示吗?
如果有帮助,我调用函数的方式是,reverse_reg(arr, 0, 4, 8);
结果数组应该是:
result:
a b c 1 2 5 7 8
【问题讨论】:
-
请说明想要的结果是什么。
-
@500-InternalServerError 是的,我刚刚添加了那个。对不起
-
1) 反转整个数组 2) 反转每个部分。或以相反的顺序 - 更方便。
-
难题。 ╔
标签: arrays c algorithm data-structures