我正在学习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 ++的新手,在我的国家中这本书受到了广泛的关注,因此不确定该书的代码中是否确实存在逻辑缺陷。而且我学校的老师也一直在说书中给出的冒泡排序代码是正确的。
所以请帮帮我。
答案 0 :(得分:3)
第一个代码块不是冒泡排序,因为冒泡排序会交换相邻的元素。 “线性排序”是一个非标准且令人困惑的术语,不同的人将这个名称用于不同的事物,我建议您不要使用它。维基百科中没有“线性排序”条目。第一个块中的算法通常称为selection sort。
与您的问题没有直接关系:这本书(不幸的是,至少一个非常大的国家的整个教育系统)使用的是一种过时的C ++方言。自1983年问世以来,该语言已发生了重大变化。到目前为止,只有少数极具专业性的利基语可以找到原始方言。有关学习现代C ++的信息,请参见StackOverflow自己的The Definitive C++ Book Guide and List。