冒泡用G ++排序

时间:2013-10-10 05:04:34

标签: c++ linux algorithm g++ bubble-sort

我只想弄清楚使用冒泡排序交换项目的次数。

当我在Windows上实现它时,它可以完美运行。但是在使用g ++的Linux上实现它,输出完全不同,我疯狂地试图找出错误。

这是我的bubbleSort功能

int bubbleSort(string s){
int num = 0;

// Bubble sort string and count inversions on each swap
for (int i = 0; i < s.length(); i++) {
    for(int j = 0; j < s.length() - 1; j++) {
        if(s[j] > s[j+1]) {
            swap(s[j], s[j+1]);
            num++;
        }
    }
}
return num;
}

任何人都可以看到这段代码有什么问题可能会给我带来Windows和Linux之间的问题吗?

测试输入: 服装CAD

应该返回6,但G ++返回10

2 个答案:

答案 0 :(得分:3)

我修改了你的代码以提供一个完整的工作程序:

#include <iostream>

int bubbleSort(std::string s) {
  int num = 0;
  for (int i = 0; i < s.length(); i++) {
    for(int j = 0; j < s.length() - 1; j++) {
      if(s[j] > s[j+1]) {
        std::swap(s[j], s[j+1]);
        num++;
        std::cout << "num is " << num << " and string is " << s << "\n";
      }
    }
  }
}

int main(void) {
  bubbleSort("ZWQM");
}

在具有g++的64位Linux计算机上编译它。跑吧。结果:

num is 1 and string is WZQM
num is 2 and string is WQZM
num is 3 and string is WQMZ
num is 4 and string is QWMZ
num is 5 and string is QMWZ
num is 6 and string is MQWZ

六次迭代,并对字符串进行排序。请确认此完全程序不会为您生成此确切输出 ...并告诉我们它的作用。

编辑我找到了一种方法来获得答案10!我在字符串中添加了换行符。

bubbleSort("ZWQM\n");

结果

num is 1 and string is WZQM

num is 2 and string is WQZM

num is 3 and string is WQMZ

num is 4 and string is WQM
Z
num is 5 and string is QWM
Z
num is 6 and string is QMW
Z
num is 7 and string is QM
WZ
num is 8 and string is MQ
WZ
num is 9 and string is M
QWZ
num is 10 and string is
MQWZ

请注意回车是如何弄乱输出的,因为它“向下气泡”到第一个字符位置。我现在99%确定您观察到的差异与您如何将字符串放入程序有关 - 而且Windows和Linux对待行尾的方式不同。

答案 1 :(得分:0)

应修改您的循环终止条件,以便进行不必要的比较:

for (int i = 0; i < s.length()-1; i++) {         
    for(int j = 0; j < s.length() - i - 1; j++) {
        if(s[j] > s[j+1]) {
            swap(s[j], s[j+1]);
            num++;
        }
    }
}

在每次迭代后,最后一个元素始终排序。