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

时间:2019-01-29 16:10:17

标签: c++

我正在尝试计算交换次数,以按给定的数组升序排序。在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;
}

1 个答案:

答案 0 :(得分:2)

您的结果是不确定的,因为您正在访问不应访问的数组位置,即,当i = n-1时,a [i + 1]试图访问“脏”的a [n] ”的记忆。 此外,我认为您的算法无法实现您想要的功能。建议您先阅读here,然后再继续。通过正确的代码,只需添加计数器(就像您所做的那样)即可获得正确的结果。

相关问题