【发布时间】:2019-01-08 17:16:33
【问题描述】:
我在完成这项家庭作业时遇到了一点问题。任务说:
"编写一个名为 MoveSmallest 的函数,它移动数组开头的所有最小整数元素。所有剩余的项目必须留在原处。(数组及其大小是参数)
示例: 数组:2, 3, 5, 1, 2, 3, 6, 4, 2, 1, 1 变为 1, 1, 1, 2, 3, 5, 2、3、6、4、2
void MoveSmallest(int A[],int n)
{
int Min;
for(int i=0;i<n;i++)
{
if(i==0)
{
Min=A[i];
}
else if(A[i]<=Min)
{
Min=A[i];
}
}
到目前为止,我只是想检查哪一个是数组中最小的元素。我不知道下一步该做什么。
【问题讨论】:
-
您可以使用 std::swap() 来...呃..交换数组中的两个元素。您所需要的只是弄清楚您需要哪些。您可以编写另一个循环,将每个元素与 Min 进行比较,并将其与最左边的一个元素交换。
-
你已经迈出了正确的第一步。您现在需要弄清楚如何将所有等于
Min的元素移动到数组的开头。一个好的开始方法是考虑只将一个元素移动到开头,以及如何将所有后续元素向下移动一个位置。 @grungegurunge Swap 在这里不起作用,因为 OP 提到需要保留剩余元素的顺序 -
@GLC 以及如何将所有后续元素向下移动一个位置您的意思是“向上”?
-
“所有剩余的物品必须留在原处。” 我认为这意味着“必须保持原样”,对吧?因为示例中的第一个
2肯定不会停留在数组中的同一个位置。 -
这似乎是使用
std::min_element和std::stable_partition的两行解决方案。