gpt4 book ai didi

c++ - G++冒泡排序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:55:49 24 4
gpt4 key购买 nike

我只是想用冒泡排序算出一个项目被交换了多少次。

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

这是我的 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 之间的问题?

测试输入:计算机辅助设计

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

最佳答案

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

#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 对行尾的处理方式不同。

关于c++ - G++冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19287463/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com