鱼C论坛

 找回密码
 立即注册
查看: 1250|回复: 3

[已解决]冒泡排序代码哪里错了

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

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

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

x
#include<iostream>
using namespace std;
int main()
{
        int arr[]={4,2,8,9,3,5,7};
        int i;
        cout<<"排序前"<<"";
    for(int i=0;i<=6;i++)
    {
             cout<<arr[i]<<endl;
        }
        for(int k=0;k<7-1;k++)
        {
                for(int j=0;j<7-1-k;j++)
                {
                        if(arr[j]>arr[j+1]);
                        {
                                int temp=arr[j];
                                arr[j]=arr[j+1];
                                       
                        }
                }
        }
        cout<<"排序后"<<"";
    for(int i=0;i<=6;i++)
        {
              cout<<arr[i]<<endl;
            }
       
       
       
        return 0;
}
最佳答案
2023-10-15 18:49:08
你的冒泡排序代码中存在一个小错误,这是在内部的if语句中。你在if语句后面加了一个分号,这实际上使得if语句结束,而后面的代码块总是会执行,不论if条件是否满足。这就导致了你的排序算法没有按照预期工作。

下面是修正后的代码:
#include<iostream>
using namespace std;
int main()
{
        int arr[]={4,2,8,9,3,5,7};
        int i; 
        cout<<"排序前"<<"";
    for(int i=0;i<=6;i++)
    {
            cout<<arr[ i]<<endl;
        }
        for(int k=0;k<7-1;k++)
        {
            for(int j=0;j<7-1-k;j++)
            {
                if(arr[j]>arr[j+1]) // 删除了这里的分号
                {
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp; // 添加了这一行,将临时变量的值赋给arr[j+1]
                    
                }
            }
        }
        cout<<"排序后"<<""; 
    for(int i=0;i<=6;i++)
        {
            cout<<arr[ i]<<endl; 
        }
        
        
        
        
        return 0;
 }

这个修正后的代码将正确地执行冒泡排序。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-10-15 18:49:08 | 显示全部楼层    本楼为最佳答案   
你的冒泡排序代码中存在一个小错误,这是在内部的if语句中。你在if语句后面加了一个分号,这实际上使得if语句结束,而后面的代码块总是会执行,不论if条件是否满足。这就导致了你的排序算法没有按照预期工作。

下面是修正后的代码:
#include<iostream>
using namespace std;
int main()
{
        int arr[]={4,2,8,9,3,5,7};
        int i; 
        cout<<"排序前"<<"";
    for(int i=0;i<=6;i++)
    {
            cout<<arr[ i]<<endl;
        }
        for(int k=0;k<7-1;k++)
        {
            for(int j=0;j<7-1-k;j++)
            {
                if(arr[j]>arr[j+1]) // 删除了这里的分号
                {
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp; // 添加了这一行,将临时变量的值赋给arr[j+1]
                    
                }
            }
        }
        cout<<"排序后"<<""; 
    for(int i=0;i<=6;i++)
        {
            cout<<arr[ i]<<endl; 
        }
        
        
        
        
        return 0;
 }

这个修正后的代码将正确地执行冒泡排序。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-15 18:49:13 | 显示全部楼层
这段代码中的问题在于,冒泡排序的交换操作没有正确执行。具体来说,当判断 arr[j]>arr[j+1] 时,应该执行交换操作,但是当前代码中,交换操作被放在了 if 语句的括号内,导致即使条件不满足时也会执行交换操作。因此,你需要将交换操作放到 if 语句的括号外面,即去掉一个分号。

下面是修改后的代码:
#include<iostream>
using namespace std;
int main()
{
    int arr[]={4,2,8,9,3,5,7};
    int i; 
    cout<<"排序前"<<endl;
    for(int i=0;i<=6;i++)
    {
        cout<<arr[ i]<<endl;
    }
    for(int k=0;k<7-1;k++)
    {
        for(int j=0;j<7-1-k;j++)
        {
            if(arr[j]>arr[j+1])
            {
                int temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
    cout<<"排序后"<<endl; 
    for(int i=0;i<=6;i++)
    {
        cout<<arr[ i]<<endl; 
    }
    return 0;
}

修改后的代码中,当 arr[j]>arr[j+1] 时,执行了正确的交换操作,即将 arr[j] 和 arr[j+1] 的值互换。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-15 18:49:28 | 显示全部楼层
你好,冒泡排序的问题在于代码中的一个分号:

[/code]
if(arr[j]>arr[j+1]);
[/code]

这里多了一个分号,导致语句不起作用,实际上这个 if 语句后面的花括号中的内容永远不会被执行。正确的代码应该是这样的:

[/code]
if (arr[j] > arr[j+1]) {
    int temp = arr[j];
    arr[j] = arr[j+1];
    arr[j+1] = temp;
}
[/code]

此外,int i 这个变量在代码中没有使用,可以将其删除。

修改后的正确代码如下:
#include<iostream>using namespace std;int main(){    int arr[] = {4,2,8,9,3,5,7};    cout << "排序前:";    for(int i=0; i<=6; i++)    {        cout << arr[i] << " ";    }    cout << endl;    for(int k=0; k<7-1; k++)    {        for(int j=0; j<7-1-k; j++)        {            if(arr[j] > arr[j+1]) {                int temp = arr[j];                arr[j] = arr[j+1];                arr[j+1] = temp;            }        }    }    cout << "排序后:";    for(int i=0; i<=6; i++)    {        cout << arr[i] << " ";    }    cout << endl;    return 0;}
希望能够帮助你解决问题,如果你还有其他问题,可以继续提问。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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