2

我有一个这样的数组:

int array[] = { 1,3,2,5,4,7,6,9,8,10 };

当我尝试遍历数组并比较数字时,它们都不会触发 if 条件,从而触发交换:

for( int i=0; i<9; i++)
{
    if (array[i] > array[i++])
    {
    cout << "Swapping" << array[i] << " " << array[i++]<< endl;
    int temp = 0;
    temp = array[i];
    array[i] = array[i++];
    array[i++] = temp;
    temp = 0;
}

}

是否有一些比较我缺少的整数的细节?它们是否因为在数组中而被区别对待?

4

5 回答 5

4

i++意思是“返回i并设置i = i + 1”。因此,每次使用时,您都会i++增加i一个,这会破坏循环。改为使用i+1

于 2012-06-11T06:20:27.267 回答
3

i++是一个后增量,并返回前一个值。

 if (array[i] > array[i+1])

现在,您正在array[i]与自己进行比较。

您还需要以下内容:

temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
于 2012-06-11T06:20:07.283 回答
1

你增加你的 i 太多次了。将您的 if 语句更改为:

如果(数组[i] > 数组[i + 1])

并修复除 for 循环中的增量之外的所有其他增量。

于 2012-06-11T06:20:59.543 回答
1

表达式:

array[i] < array[i++]

array[i] = array[i++]

是未定义的行为,所以任何事情都可能发生。(正如其他人指出的那样,它可能不是你想要的。正如所写的,i每次循环时你都会增加 5 次。)

于 2012-06-11T08:21:24.620 回答
0

您应该使用以下代码:-

for( int i=0; i<9; i++)
{
    if (array[i] > array[i+1])
    {
     cout << "Swapping" << array[i] << " " << array[i+1]<< endl;
     int temp = 0;
     temp = array[i];
     array[i] = array[i+1];
     array[i+1] = temp;
    temp = 0;
    }
}

声明:if (array[i] > array[i++])相当于if (array[i] > array[i])which 没有意义。

于 2012-06-11T06:26:11.720 回答