【发布时间】:2022-01-02 12:05:21
【问题描述】:
我正在用 C++ 编写选择排序的代码。当我在 powershell 中使用命令g++ main.cpp -o main 编译它时没有错误,但是当我使用./main 运行代码时,它不显示任何内容。我尝试了 hello world 程序,它奏效了。我不知道为什么选择排序代码不起作用。
这是选择排序的代码
#include<iostream>
using namespace std;
int main()
{
int n, a[n];
cout << "Enter the size of the array = ";
cin >> n;
cout << "Enter the numbers :" << endl;
for (int i = 0; i < n; i++)
{
cin >> a[i];
}
for (int i = 0; i < n-1; i++)
{
for (int j = i+1; j < n; j++)
{
if (a[i] > a[j])
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
for (int b=0; b<n; b++)
{
cout<<a[b];
}
return 0;
}
【问题讨论】:
-
打开警告以查看错误:godbolt.org/z/ErPY3x936
-
即使 n 已被初始化,但事实并非如此。 a[n] 不是有效的 C++。如果您想要一个动态(重新)大小的数组,请查看 std::vector 。总是在 C++ 中初始化你的变量,编译器不会隐式地为你做这件事。
-
编译时没有错误 -- 那只意味着没有语法错误。如果我让你编写一个程序来添加两个数字,但它却减去了两个数字,那么该程序也将“无错误地编译”。但它是正确的吗?不。程序不逻辑上正确。
-
我不知道为什么选择排序代码不起作用。 -- What is a debugger?.
-
仅供参考,这不是经典的selection sort。选择排序扫描序列中未排序的部分,记住当前极值的索引位置。一旦扫描完成,最极端值所在的索引位置将与适当的位置(用作索引的外循环的迭代计数)交换。简而言之,每次外循环迭代应该只有 一个 交换,并且应该发生在 内循环完成之后。
标签: c++ arrays sorting for-loop output