【问题标题】:c++ bubble sort or linear sort, confusing book [closed]c ++冒泡排序或线性排序,令人困惑的书[关闭]
【发布时间】:2018-09-02 06:10:23
【问题描述】:

我正在学习 c++,但我正在阅读一本在学校推荐给我的糟糕书。它有很多错误,但我发现了程序逻辑错误的错误。您能否检查一下这是否真的是一个错误或者我理解错了?

根据书上冒泡排序的代码如下-

#include <iostream.h>
main()
{
  int num, i, j, temp;
  cin >> num;
  int item[num];
  for (i = 0; i < num; i++)
    cin >> item[i];
  for (i = 0; i < num -1; i++)
    for ( j = i+1; j < num; j++)
      if (item[i] > item[j]){
         temp = item[i];
         item[i] = item[j];
         item[j] = temp;
      }

我的想法 - 我认为这是线性排序而不是冒泡排序,因为在这里我们将一个元素与数组中它下面的所有元素进行比较,如果发现一个较小的元素交换它们。

根据我的说法,冒泡排序的正确代码应该是这样的

void bubble_sort_bottomsup(int a[], int n)
{
  //implementing bubble sort
  //a[] is the array to be sorted and n is the total number of elements in that array
  for (int i = 1; i<n; i++)
  {
     for (int j = n-1; j>0; j--)
     {
        if (a[j] < a[j-1])
        {
            int temp;
            temp = a[j-1];
            a[j-1] = a[j];
            a[j] = temp;
        }
     }
  }
}

我说的对吗??我是 C++ 新手,这本书在我的国家得到了广泛的关注,所以不太确定这本书的代码是否真的存在逻辑缺陷。我学校的老师也一直说书中给出的冒泡排序代码是正确的。

所以请帮帮我。

【问题讨论】:

  • 你确定第一段代码是正确的吗?它似乎没有从 main 关闭 {。
  • 我没有完成该块,因为我只是想显示排序部分。
  • #include &lt;iostream.h&gt; main() -- 那本书一定是折角,书页泛黄。像这样的代码已经过时了 20 年了。
  • 冒泡排序应该交换相邻的对。第一个代码没有这样做。
  • @n.m 直到学生们收到的书在打开时分崩离析,事情才可能改变。

标签: c++ arrays sorting bubble-sort


【解决方案1】:

第一个代码块不是冒泡排序,因为冒泡排序交换了相邻的元素。 “线性排序”是一个非标准且令人困惑的术语,不同的人将这个名称用于不同的事物,我建议不要使用它。维基百科中没有“线性排序”的条目。第一个块中的算法通常称为selection sort


与您的问题没有直接关系:这本书(不幸的是,至少一个非常大的国家的整个教育系统)正在使用一种非常过时的 C++ 方言。自 1983 年问世以来,该语言发生了非常显着的变化。截至目前,原始方言只能在极少数非常专业的领域中找到。如需学习现代 C++,请参阅 StackOverflow 自己的 The Definitive C++ Book Guide and List

【讨论】:

  • 你推荐哪些现代 c++ 书籍,我已经涵盖了相当多的基础知识。我应该从这里开始。
  • @NitinPathak 添加了书单的链接。
  • @NitinPathak Turbo C++ 的规范帖子,带有建议和链接:stackoverflow.com/questions/44863062/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-15
  • 2015-03-01
  • 2018-05-18
  • 2014-03-26
  • 2018-11-13
  • 2013-06-28
  • 2012-02-10
相关资源
最近更新 更多