如何在C中编写shift_元素函数?

如何在C中编写shift_元素函数?,c,insertion-sort,C,Insertion Sort,我有一个C语言的问题: 实现函数:shift_elementint*arr,int i 函数将获得一个指针,不一定是数组的开头,函数将把i next值向右移动。请注意,该函数假定数组指针之后至少有i+1个单元格的内存 这不是我可以在插入排序中使用的交换函数吗?我不太明白这个问题。谢谢。您可以使用memcpy: 手册中的说明: The memcpy() function copies n bytes from memory area src to memory area dest. The me

我有一个C语言的问题:

实现函数:shift_elementint*arr,int i

函数将获得一个指针,不一定是数组的开头,函数将把i next值向右移动。请注意,该函数假定数组指针之后至少有i+1个单元格的内存

这不是我可以在插入排序中使用的交换函数吗?我不太明白这个问题。谢谢。

您可以使用memcpy:

手册中的说明:

The memcpy() function copies n bytes from memory area src to memory
area dest.  The memory areas must not overlap.  Use memmove(3) if the
memory areas do overlap.
如果要移动元素,实际上不需要对它们进行排序,甚至也不需要交换两个元素。正如您所说,您只需要将每个元素移动到下一个位置

一个常规的循环应该足够了,在这个循环中,您只需执行arr[index+1]=arr[index],但要小心从右向左走,循环从i开始,然后下降到0,否则您将对要移动的元素造成冲击


请注意,在大多数编程语言中,shift函数的作用通常是相反的:将所有元素向左移动,返回列表顶部的元素,然后将其丢弃。

没有内置函数,还有其他方法可以做到这一点吗?虽然在专业环境中这完全是正确的方法,我怀疑这可能是本次演习的目的。我认为,我们的目标正是想一想我们自己能够正确实施这一点的方式……是的,你的答案显然更符合这个问题。
The memcpy() function copies n bytes from memory area src to memory
area dest.  The memory areas must not overlap.  Use memmove(3) if the
memory areas do overlap.