鱼C论坛

 找回密码
 立即注册
查看: 1594|回复: 2

[已解决]冒泡排序又是那里错了?

[复制链接]
发表于 2023-10-18 19:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

using namespace std;
int main()
{
        int arr[10]={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[j]>arr[j+1])
                        {
                                int temp=arr[j];
                                arr[j]=arr[j+1];
                                arr[j+1]=temp;
                               
                        }
                       
                }
                cout<<arr[i]<<endl;
        }
}
最佳答案
2023-10-18 19:53:36
冒泡排序算法的实现基本正确,但是在输出排序结果时存在一个问题。在内层循环中,每次比较并交换元素后,最大的元素会被移动到数组的末尾。然而,你在每次外层循环结束后,使用cout语句输出的是当前位置的元素,而不是排序后的结果。

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

修改后的代码如下:

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

using namespace std;
int main()
{
    int arr[10]={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[j]>arr[j+1])
            {
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
               
            }
            
        }
    }
    for(int i=0;i<10;i++)
    {
        cout<<arr[ i]<<endl;
    }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-18 19:53:36 | 显示全部楼层    本楼为最佳答案   
冒泡排序算法的实现基本正确,但是在输出排序结果时存在一个问题。在内层循环中,每次比较并交换元素后,最大的元素会被移动到数组的末尾。然而,你在每次外层循环结束后,使用cout语句输出的是当前位置的元素,而不是排序后的结果。

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

修改后的代码如下:

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

using namespace std;
int main()
{
    int arr[10]={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[j]>arr[j+1])
            {
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
               
            }
            
        }
    }
    for(int i=0;i<10;i++)
    {
        cout<<arr[ i]<<endl;
    }
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-18 19:53:37 | 显示全部楼层
你的冒泡排序算法本身没有问题,但是你在排序过程中就试图输出排序结果,这是不正确的。你应该在整个排序过程完成后再输出排序结果。以下是修改后的代码:

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

  2. using namespace std;
  3. int main()
  4. {
  5.     int arr[10]={4,85,3,234,45,345,345,122,30,12};
  6.     for(int i=0;i<10;i++)
  7.     {
  8.         for(int j=0;j<10-i-1;j++)        
  9.         {
  10.             if(arr[j]>arr[j+1])
  11.             {
  12.                 int temp=arr[j];
  13.                 arr[j]=arr[j+1];
  14.                 arr[j+1]=temp;
  15.             }
  16.         }
  17.     }
  18.     for(int i=0;i<10;i++)
  19.     {
  20.         cout<<arr[ i]<<endl;
  21.     }
  22.     return 0;
  23. }
复制代码


在这个修改后的代码中,我添加了一个新的循环来输出排序后的数组。这样,你就可以在整个排序过程完成后看到排序的结果了。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 01:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表