使用 G++ 进行气泡排序
Bubble Sort with G++
我只是想弄清楚使用气泡排序交换了多少次项目。
当我在Windows上实现它时,它可以完美地工作。但是使用 g++ 在 Linux 上实现它,输出完全不同,我疯狂地试图找出错误。
这是我的气泡排序函数
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 之间带来问题吗?
测试输入:GCAD
应该返回 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");
}
在 64 位 Linux 机器上编译了它,g++
.运行它。结果:
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("ZWQMn");
结果在
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 以不同的方式处理行尾。
应修改循环终止条件,以便执行不必要的比较,如下所示:
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++;
}
}
}
与每次迭代一样,最后一个元素始终被排序。
相关文章:
- 在气泡排序程序中未声明错误功能
- 气泡排序未正确循环
- 带有枚举方向/类型的气泡排序结构数组
- 在气泡排序中使用递归
- 如何在C++中实现气泡排序?
- 比较迭代器会使程序崩溃,而不会在自定义气泡排序实现中出现错误
- C++气泡排序的问题
- 气泡排序C++ OOP
- OOP 气泡排序C++程序
- 按升序对列表进行排序,C++使用气泡排序
- C++气泡排序
- 此气泡排序代码中的错误是什么?
- 气泡排序 2D 数组
- 如何使用气泡排序从最小到最大对 4 个数组进行排序? C++
- 添加气泡排序代码以排列列表
- 使用向量和气泡排序的动态内存分配
- 带修改(偏移)的气泡排序
- 使用C++进行气泡排序
- 选择排序与气泡排序C++
- 为什么我的气泡排序不适用于双精度数据类型?