王鹿其 发表于 2023-10-31 16:25:43

冒泡排序哪里出错了

#include<iostream>
using namespace std;
int main()
{
        int arr = { 6, 76,93,85   ,34   ,75   ,15, 88   ,29   ,95 };
        for (int i = 0; i < 10 - 1; i++)
        {
                for (int j = 0; j < 10 - i - 1; j++)
                {
                        if (arr > arr)
                        {
                                int temp = arr;
                                arr = arr;
                                arr = temp;
                        }
                       
                }
                cout << arr << "" << endl;
        }
       
        return 0;
}

isdkz 发表于 2023-10-31 16:25:56

冒泡排序是一种简单的排序算法,但是在你的代码中有一个错误。在交换两个元素的位置时,你使用了一个错误的变量名,导致排序结果不正确。

正确的代码应该是这样的:

#include<iostream>
using namespace std;
int main()
{
    int arr = { 6 , 76 ,93 ,85 ,34 ,75 ,15 , 88 ,29 ,95 };
    for (int i = 0; i < 10 - 1; i++)
    {
      for (int j = 0; j < 10 - i - 1; j++)
      {
            if (arr > arr)
            {
                int temp = arr;
                arr = arr;
                arr = temp; // 这里修正了错误
            }
      }
    }
   
    for (int i = 0; i < 10; i++) // 将输出移到循环外部
    {
      cout << arr[ i] << " ";
    }
   
    return 0;
}


修正后的代码将会正确地对数组进行冒泡排序,并输出排序后的结果。

Mike_python小 发表于 2023-10-31 16:26:53

在冒泡排序的实现中,交换数组中相邻两个元素的位置是很关键的一个步骤。但是,在您的代码中,似乎出现了一个小错误,导致交换没有完成。

具体来说,您在交换数组中相邻两个元素的位置时,将temp的值赋给了arr,但是却没有将arr的值赋给arr,而是再次将arr的值赋给了arr,这显然是不正确的。这个错误可以通过更改以下代码来修复:


if (arr > arr)
{
    int temp = arr;
    arr = arr;
    arr = temp; // 修正这里
}


此外,在每一轮内层循环结束后,您需要打印整个数组,以便查看排序进展情况。因此,将cout << arr << "" << endl;移动到外层循环之后,如下所示:


for (int i = 0; i < 10 - 1; i++)
{
    for (int j = 0; j < 10 - i - 1; j++)
    {
      if (arr > arr)
      {
            int temp = arr;
            arr = arr;
            arr = temp; // 修正这里
      }
    }
    // 将cout移动到外层循环之后
    for (int j = 0; j < 10; j++)
    {
      cout << arr << " ";
    }
    cout << endl;
}


这样,就可以在每一轮排序结束后打印出当前的数组情况了。完整的修正后代码如下:


#include<iostream>
using namespace std;
int main()
{
    int arr = { 6 , 76 ,93 ,85 ,34 ,75 ,15 , 88 ,29 ,95 };
    for (int i = 0; i < 10 - 1; i++)
    {
      for (int j = 0; j < 10 - i - 1; j++)
      {
            if (arr > arr)
            {
                int temp = arr;
                arr = arr;
                arr = temp; // 修正这里
            }

      }
      // 将cout移动到外层循环之后
      for (int j = 0; j < 10; j++)
      {
            cout << arr << " ";
      }
      cout << endl;
    }
    return 0;
}


希望这个解答对您有所帮助,如果您还有其他问题,请随时提问。

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