【发布时间】:2020-02-24 22:37:00
【问题描述】:
我是 C++ 新手,正在尝试编写这个简单的选择排序函数。如果对更有经验的编码人员来说答案很简单,我很抱歉,但我是初学者并且一直盯着这个问题很长时间无济于事。这是我的代码:
#include <iostream>
#include <array>
using namespace std;
array<int, 10> unsorted {3, 4, 1, 5, 7, 2, 8, 9, 6, 0};
void printarray(array<int, 10> arr) {
int count = 0;
for (int i : arr) {
if (count < arr.size()-1) {
cout << i << ", ";
} else {
cout << i << endl;
}
count++;
};
}
int selection_sort(array<int, 10> arr) {
int test;
array<int, 10> newarr;
for(int j = 0; j < arr.size(); j++) {
test = arr[j];
for(int i = j; i < arr.size(); i++) {
if(arr[i+1] < test) {
test = arr[i];
}
}
newarr[j] = test;
}
printarray(newarr);
return 0;
}
int main() {
selection_sort(unsorted);
return 0;
}
当我运行这个函数时,它会打印一个包含 10 个零的 int 数组。我为数组赋值的方式(在 C++ 中)是否存在错误,或者逻辑本身是否存在问题?
【问题讨论】:
-
听起来你可能需要学习如何使用调试器来单步调试你的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs 和 Debugging Guide
-
arr中的值是什么?如果最小值在arr的末尾,它将被复制到每个元素中 -
除了 NathanOliver 关于调试的建议,我们还需要minimal reproducible example 来回答您的问题。这应该包括一个
main()函数,说明如何调用selection_sort()函数。 -
@AlanBirtles 事实上最后一个值是零! arr 的值为 {3, 4, 1, 5, 7, 2, 8, 9, 6, 0}。现在这绝对是有道理的,我看到了那里的逻辑错误,谢谢!
-
if(arr[i+1] < test)的一些错误。当i达到最大值arr.size()- 1 时,arr[i+1]将越界。