C++ 通过比较数组中的相邻元素来计算交换数
我试图计算交换次数,以便按升序对给定数组进行排序。在for循环中,我有一个if条件来检查条件weather to swap or not,但在if条件中,我添加了一个C++ 通过比较数组中的相邻元素来计算交换数,c++,C++,我试图计算交换次数,以便按升序对给定数组进行排序。在for循环中,我有一个if条件来检查条件weather to swap or not,但在if条件中,我添加了一个cout语句来检查哪些元素正在被比较,当我有cout语句时,打印的swap数量是不同的,当我删除该声明时,打印的掉期数量不同,对于样本: 如果我有cout语句 样本输入 1 4 4 1 2 3 1 4 4 1 2 3 和输出为 3 4 如果我删除或评论cout语句 样本输入 1 4 4 1 2 3 1 4
cout
语句来检查哪些元素正在被比较,当我有cout
语句时,打印的swap数量是不同的,当我删除该声明时,打印的掉期数量不同,对于样本:
如果我有cout语句
样本输入
1
4
4 1 2 3
1
4
4 1 2 3
和输出为
3
4
如果我删除或评论cout语句
样本输入
1
4
4 1 2 3
1
4
4 1 2 3
和输出为
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;
}
#包括
使用名称空间std;
int main(){
int swap=0,t,n,arr[20],温度;
cin>>t;
while(t!=0){
cin>>n;
对于(int i=0;i>arr[i];
}
对于(int i=0;iarr[i+1]){
swap++;
cout您的结果是不确定的,因为您正在访问不应访问的数组位置,即当i=n-1时,[i+1]正试图访问“脏”内存的[n]。
此外,我认为你的算法没有达到你想要的效果。我建议你在继续之前阅读。从正确的代码中,添加计数器(正如你所做的那样)就足以获得正确的结果。arr[I+1]
如果我没有弄错,它是不受限制的。arr[I+1]的值是多少在循环的最后一次迭代中,即i=n-1?