王鹿其 发表于 2023-10-15 18:48:35

冒泡排序代码哪里错了

#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<<endl;
        }
        for(int k=0;k<7-1;k++)
        {
                for(int j=0;j<7-1-k;j++)
                {
                        if(arr>arr);
                        {
                                int temp=arr;
                                arr=arr;
                                       
                        }
                }
        }
        cout<<"排序后"<<"";
    for(int i=0;i<=6;i++)
      {
              cout<<arr<<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>arr) // 删除了这里的分号
                {
                  int temp=arr;
                  arr=arr;
                  arr=temp; // 添加了这一行,将临时变量的值赋给arr
                  
                }
            }
      }
      cout<<\"排序后\"<<\"\";
    for(int i=0;i<=6;i++)
      {
            cout<<arr[ i]<<endl;
      }
      
      
      
      
      return 0;
}


这个修正后的代码将正确地执行冒泡排序。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-10-15 18:49:13

这段代码中的问题在于,冒泡排序的交换操作没有正确执行。具体来说,当判断 arr>arr 时,应该执行交换操作,但是当前代码中,交换操作被放在了 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>arr)
            {
                int temp=arr;
                arr=arr;
                arr=temp;
            }
      }
    }
    cout<<"排序后"<<endl;
    for(int i=0;i<=6;i++)
    {
      cout<<arr[ i]<<endl;
    }
    return 0;
}


修改后的代码中,当 arr>arr 时,执行了正确的交换操作,即将 arr 和 arr 的值互换。

Mike_python小 发表于 2023-10-15 18:49:28

你好,冒泡排序的问题在于代码中的一个分号:


if(arr>arr);


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


if (arr > arr) {
    int temp = arr;
    arr = arr;
    arr = temp;
}


此外,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 << " ";
    }
    cout << endl;

    for(int k=0; k<7-1; k++)
    {
      for(int j=0; j<7-1-k; j++)
      {
            if(arr > arr) {
                int temp = arr;
                arr = arr;
                arr = temp;
            }
      }
    }

    cout << "排序后:";
    for(int i=0; i<=6; i++)
    {
      cout << arr << " ";
    }
    cout << endl;

    return 0;
}


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

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 冒泡排序代码哪里错了