我正在尝试计算交换次数,以按给定的数组升序排序。在for循环中,我有一个if条件来检查条件天气是否要交换,但是在if条件中,我添加了cout
语句以检查要比较的元素,当我有那个cout
时对于示例,打印的对换的对帐单数不同,并且当我删除该语句时,对换的对帐单数也不同:
如果我有cout声明
样本输入
1
4
4 1 2 3
,输出结果为
3
如果我删除或评论该cout语句
样本输入
1
4
4 1 2 3
,输出结果为
4
我不知道原因。
#include <iostream>
using namespace std;
int main() {
int swap=0,t,n,arr[20],temp;
cin>>t;
while(t!=0) {
cin>>n;
for(int i = 0 ; i < n ; i++) {
cin>>arr[i];
}
for(int i = 0 ; i < n ; i++) {
if(arr[i]>arr[i+1]) {
swap++;
cout<<arr[i]<<">"<<arr[i+1]<<endl; //this cout statement
temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
cout<<swap<<endl;
--t;
}
return 0;
}
答案 0 :(得分:2)
您的结果是不确定的,因为您正在访问不应访问的数组位置,即,当i = n-1时,a [i + 1]试图访问“脏”的a [n] ”的记忆。 此外,我认为您的算法无法实现您想要的功能。建议您先阅读here,然后再继续。通过正确的代码,只需添加计数器(就像您所做的那样)即可获得正确的结果。