我有一个数组:
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;
}
}
是否有一些比较我缺少的整数的细节?它们是否因阵列而被区别对待?
答案 0 :(得分:4)
i++
表示“返回i
并设置i = i + 1
”。因此,每次使用i++
时,您都会将i
增加一个会破坏循环。请改用i+1
。
答案 1 :(得分:3)
i++
是一个后增量,并返回先前的值。
if (array[i] > array[i+1])
目前,您正在将array[i]
与自身进行比较。
您还需要以下内容:
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
答案 2 :(得分:1)
你增加你的次数太多了。 将您的if语句更改为:
if(array [i]&gt; array [i + 1])
并修复所有其他增量同样远离for循环中的增量。
答案 3 :(得分:1)
表达式:
array[i] < array[i++]
和
array[i] = array[i++]
是未定义的行为,因此任何事情都可能发生。 (正如其他人指出的那样
不管怎么说,这可能不是你想要的。如上所述,你是
每次循环时递增i
5次。)
答案 4 :(得分: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])
,这是没有意义的。