通过比较数组中的相邻元素来计算交换次数



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

最新更新