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

问题描述 投票:-1回答:1

我正在学习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 ++的新手,这本书在我的国家广泛使用,所以不太确定本书的代码中确实存在逻辑上的缺陷。我学校的老师也继续说,书中给出的泡沫排序代码是正确的。

所以请帮帮我。

c++ arrays sorting bubble-sort
1个回答
3
投票

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


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

© www.soinside.com 2019 - 2024. All rights reserved.