鱼C论坛

 找回密码
 立即注册
查看: 1159|回复: 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;
    }
}
想知道小甲鱼最近在做啥?请访问 -> 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;
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 08:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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