【问题标题】:How do you do a Bubble Sort for an Array in C++?如何在 C++ 中对数组进行冒泡排序?
【发布时间】:2020-02-19 21:57:09
【问题描述】:

我得到了 4 个数字,我必须输入它们并使用冒泡排序将它们从低到高排序。 这是我目前用于冒泡排序的内容:

void bubble_sort()
{
    for (int i=0;i<4;i++)
    {
        if(num[i]>num[i+1])
        {
            float temp;
            temp=num[i+1];
            num[i]=num[i+1];
            num[i+1]=temp;
        }
    }
}

当我输出带有输入的数组时:3.72、3.92、3.46 和 3.86 我得到:3.72、3.46、3.46、0

【问题讨论】:

  • temp=num[i+1]; ==> temp=num[i]; 更好,std::swap(num[i], num[i+1])
  • 您只是将数组的第一个值“冒泡”。要对整个数组进行排序,您需要将它们全部冒泡。
  • 冒泡排序是 O(N^2) 这意味着它应该是循环中的循环
  • 我强烈建议在互联网上搜索“c++ 冒泡排序示例”。在发布到 StackOverflow 之前始终进行搜索。

标签: c++ bubble-sort


【解决方案1】:

代码中出现的一些错误如下

  1. 以错误的方式交换值。 (正如问题的 cmets 所指出的)
  2. j 的值为3,在这种情况下,当temp = num[j+1] 运行时,它将在索引4 中拾取垃圾值。
  3. 只有一个for 循环仅在循环中迭代一次。请阅读冒泡排序的工作基础和复杂性以及它如何使用来自here 的至少两个循环

现在正确答案的形式是

    void bubble_sort(float num[]) {
    for (int i=0;i<4;i++) {
        for(int j=0;j<3;j++){
            if(num[j]>num[j+1])
            {
                float temp;
                temp=num[j+1];
                num[j+1]=num[j];
                num[j]=temp;
            }
        }
      }
    for(int i=0;i<4;i++)
        cout<<num[i];
    }

【讨论】:

    猜你喜欢
    • 2013-06-10
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2015-12-11
    • 2016-07-25
    • 2014-05-17
    • 2012-04-14
    相关资源
    最近更新 更多