c ++冒泡排序或线性排序,令人困惑的书

c++ bubble sort or linear sort, confusing book

我正在学习 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++ 的新手,这本书在我的国家广为流传,所以不太确定这本书的代码中是否真的存在逻辑缺陷。我学校的老师也口口声声说书上给出的冒泡排序代码是正确的

所以请帮帮我。

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


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