鱼C论坛

 找回密码
 立即注册
查看: 728|回复: 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条件是否满足。这就导致了你的排序算法没有按照预期工作。

下面是修正后的代码:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int arr[]={4,2,8,9,3,5,7};
  6.         int i;
  7.         cout<<"排序前"<<"";
  8.     for(int i=0;i<=6;i++)
  9.     {
  10.             cout<<arr[ i]<<endl;
  11.         }
  12.         for(int k=0;k<7-1;k++)
  13.         {
  14.             for(int j=0;j<7-1-k;j++)
  15.             {
  16.                 if(arr[j]>arr[j+1]) // 删除了这里的分号
  17.                 {
  18.                     int temp=arr[j];
  19.                     arr[j]=arr[j+1];
  20.                     arr[j+1]=temp; // 添加了这一行,将临时变量的值赋给arr[j+1]
  21.                     
  22.                 }
  23.             }
  24.         }
  25.         cout<<"排序后"<<"";
  26.     for(int i=0;i<=6;i++)
  27.         {
  28.             cout<<arr[ i]<<endl;
  29.         }
  30.         
  31.         
  32.         
  33.         
  34.         return 0;
  35. }
复制代码


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

使用道具 举报

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

下面是修正后的代码:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.         int arr[]={4,2,8,9,3,5,7};
  6.         int i;
  7.         cout<<"排序前"<<"";
  8.     for(int i=0;i<=6;i++)
  9.     {
  10.             cout<<arr[ i]<<endl;
  11.         }
  12.         for(int k=0;k<7-1;k++)
  13.         {
  14.             for(int j=0;j<7-1-k;j++)
  15.             {
  16.                 if(arr[j]>arr[j+1]) // 删除了这里的分号
  17.                 {
  18.                     int temp=arr[j];
  19.                     arr[j]=arr[j+1];
  20.                     arr[j+1]=temp; // 添加了这一行,将临时变量的值赋给arr[j+1]
  21.                     
  22.                 }
  23.             }
  24.         }
  25.         cout<<"排序后"<<"";
  26.     for(int i=0;i<=6;i++)
  27.         {
  28.             cout<<arr[ i]<<endl;
  29.         }
  30.         
  31.         
  32.         
  33.         
  34.         return 0;
  35. }
复制代码


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

使用道具 举报

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

下面是修改后的代码:

  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int arr[]={4,2,8,9,3,5,7};
  6.     int i;
  7.     cout<<"排序前"<<endl;
  8.     for(int i=0;i<=6;i++)
  9.     {
  10.         cout<<arr[ i]<<endl;
  11.     }
  12.     for(int k=0;k<7-1;k++)
  13.     {
  14.         for(int j=0;j<7-1-k;j++)
  15.         {
  16.             if(arr[j]>arr[j+1])
  17.             {
  18.                 int temp=arr[j];
  19.                 arr[j]=arr[j+1];
  20.                 arr[j+1]=temp;
  21.             }
  22.         }
  23.     }
  24.     cout<<"排序后"<<endl;
  25.     for(int i=0;i<=6;i++)
  26.     {
  27.         cout<<arr[ i]<<endl;
  28.     }
  29.     return 0;
  30. }
复制代码


修改后的代码中,当 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 这个变量在代码中没有使用,可以将其删除。

修改后的正确代码如下:
  1. #include<iostream>
  2. using namespace std;
  3. int main()
  4. {
  5.     int arr[] = {4,2,8,9,3,5,7};
  6.     cout << "排序前:";
  7.     for(int i=0; i<=6; i++)
  8.     {
  9.         cout << arr[i] << " ";
  10.     }
  11.     cout << endl;
  12.     for(int k=0; k<7-1; k++)
  13.     {
  14.         for(int j=0; j<7-1-k; j++)
  15.         {
  16.             if(arr[j] > arr[j+1]) {
  17.                 int temp = arr[j];
  18.                 arr[j] = arr[j+1];
  19.                 arr[j+1] = temp;
  20.             }
  21.         }
  22.     }
  23.     cout << "排序后:";
  24.     for(int i=0; i<=6; i++)
  25.     {
  26.         cout << arr[i] << " ";
  27.     }
  28.     cout << endl;
  29.     return 0;
  30. }
复制代码

希望能够帮助你解决问题,如果你还有其他问题,可以继续提问。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 10:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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