王鹿其 发表于 2023-10-18 19:53:03

冒泡排序又是那里错了?

#include<bits/stdc++.h>//万能头文件

using namespace std;
int main()
{
        int arr={4,85,3,234,45,345,345,122,30,12};
        for(int i=0;i<10;i++)
        {
                for(int j=0;j<10-i-1;j++)       
                {
                        if(arr>arr)
                        {
                                int temp=arr;
                                arr=arr;
                                arr=temp;
                               
                        }
                       
                }
                cout<<arr<<endl;
        }
}

isdkz 发表于 2023-10-18 19:53:36

冒泡排序算法的实现基本正确,但是在输出排序结果时存在一个问题。在内层循环中,每次比较并交换元素后,最大的元素会被移动到数组的末尾。然而,你在每次外层循环结束后,使用cout语句输出的是当前位置的元素,而不是排序后的结果。

要正确输出排序结果,你需要将cout语句移动到外层循环的结束位置,即将cout<<arr[ i]<<endl;移动到外层循环的大括号"}"之后。

修改后的代码如下:

#include<bits/stdc++.h>//万能头文件

using namespace std;
int main()
{
    int arr={4,85,3,234,45,345,345,122,30,12};
    for(int i=0;i<10;i++)
    {
      for(int j=0;j<10-i-1;j++)      
      {
            if(arr>arr)
            {
                int temp=arr;
                arr=arr;
                arr=temp;
               
            }
            
      }
    }
    for(int i=0;i<10;i++)
    {
      cout<<arr[ i]<<endl;
    }
}

陶远航 发表于 2023-10-18 19:53:37

你的冒泡排序算法本身没有问题,但是你在排序过程中就试图输出排序结果,这是不正确的。你应该在整个排序过程完成后再输出排序结果。以下是修改后的代码:

#include<bits/stdc++.h> //万能头文件

using namespace std;
int main()
{
    int arr={4,85,3,234,45,345,345,122,30,12};
    for(int i=0;i<10;i++)
    {
      for(int j=0;j<10-i-1;j++)      
      {
            if(arr>arr)
            {
                int temp=arr;
                arr=arr;
                arr=temp;
            }
      }
    }
    for(int i=0;i<10;i++)
    {
      cout<<arr[ i]<<endl;
    }
    return 0;
}


在这个修改后的代码中,我添加了一个新的循环来输出排序后的数组。这样,你就可以在整个排序过程完成后看到排序的结果了。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 冒泡排序又是那里错了?