我正在尝试计算交换次数以按升序对给定数组进行排序。在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;
}
您的结果是不确定的,因为您正在访问不应访问的数组位置,即当 i = n - 1 时,a[i+1] 正在尝试访问 a[n] 是"脏"内存。此外,我认为您的算法不会做您希望它做的事情。我建议您在继续之前先阅读此处。从正确的代码中,添加计数器(就像您所做的那样)即可获得正确的结果。