C++冒泡排序出现bug

img

img


我想把数组里的数字按从小到大排序(冒泡排序),可后面四个数字没有变化,找了半天都不知道是哪里错了。

a<9-a-1
->
a<9-i-1

你的第二层循环的条件写错啦,因为每轮都会有一个数字被排好,因此第二层循环还需要比较的数字就是9-i-1!
冒泡还可以这样写:

#include<bits/stdc++.h>
using namespace std; 
int main()
{
    int a[100];
    int n;
    cin>>n;//输入排序长度
    for(int i=1;i<=n;i++) cin>>a[i];//输入排序数组 
    for(int i=1;i<=n-1;i++){
        for(int j=i+1;j<=n;j++)
        {
            if(a[j]<a[i]) swap(a[i],a[j]);
        }    
    } 
    for(int i=1;i<=n;i++) cout<<a[i]<<" "; 
    return 0;
}

还有如果需要排序的话,用C++已经写好的函数就行啦。
格式sort(起始元素,结束元素)//从小到大把数组排一遍序

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7612504
  • 这篇博客也不错, 你可以看下数据结构(C语言实现):判断两棵二叉树是否相等,bug求解
  • 除此之外, 这篇博客: 【C++】黑马程序员《C++从入门到精通》中的 第八部分:bug与思考 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    问题分析:

    在这段代码中,冒泡排序的实现看起来是正确的。它使用两个嵌套的循环来遍历数组并交换相邻的元素,以实现从小到大的排序。

    然而,根据问题描述,后面四个数字没有发生变化。这可能是由于不正确的数组大小导致的。

    在冒泡排序的内循环中,通过 n-i-1 控制每轮比较的次数。但是,在这段代码中,数组的大小是固定的,即 n = 7。所以,内循环应该是 j < n-1,而不是 j < n-i-1,以确保所有元素都被正确比较和交换。

    我的建议是将 bubbleSort 函数的内循环条件修改为 j < n-1

    void bubbleSort(int arr[], int n) {
        for (int i = 0; i < n-1; i++) {
            for (int j = 0; j < n-1; j++) {
                if (arr[j] > arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }
    

    这样修改后再次运行代码,数组应该会按照预期进行排序。

    请尝试以上修改,并告知我结果。如果还有其他问题,请随时向我提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^