【发布时间】:2017-08-23 11:36:18
【问题描述】:
我有这样的问题: 我得到了数组的大小和数组本身(所有元素),我需要按照数组中第一项(我们称之为关键项)的放置方式对数组进行排序,以便所有小于关键项的项从关键项离开并且所有大于关键项目的项目都正确地形成关键项目,但这些项目需要与它们在声明中的顺序相同,如下所示: 数组输入:
4 7 3 5 6 2 9 1 10 8
数组输出:
3 2 1 4 7 5 6 9 10 8
所以我想我可以只通过数组一次,如果值较小,则关键项交换它们,如果值大于关键项,则将该值 (item) 放在最后(如果数组中有 n 项将它放在 n+1 位置),然后将所有项目从当前索引向左移动一个位置,例如:
| 4 | 7 | 3 | 5 | 6 | 2 | 9 | 1 | 10 | 8 |
| 4 | | 3 | 5 | 6 | 2 | 9 | 1 | 10 | 8 | 7 |
| 4 | 3 | 5 | 6 | 2 | 9 | 1 | 10 | 8 | 7 |
但是像这样我需要在每次移动后使迭代器保持不变(这样它就可以再次检查那个地方。 我有这样的代码:
int u=1;
for (int i=1;i<n;i++){
if (x[i]<x[u]){
swap(x[i],x[u]);
u+=1;
}else {
x[i]=x[n];
for (int k=i;k<n-1;k++){x[k]=x[k+1];}
i--;
}
}
我认为我在交换部分中犯了一个错误,但我无法弄清楚。
【问题讨论】:
-
假设
x是一个数组或类似数组的类型,您确定x[n]是您数组中的合法元素吗?如果您有一个数组int x[n],那么您可以访问的最后一个元素是x[n-1];。您不能将元素放置在数组末尾之外并期望它会增长以适应它。 -
我有 int x[100] 并且在输入中我只填写了 10 个(101 个?)个地方
标签: c++ arrays for-loop iterator