我正在尝试编写一个通过选择对一个小的数组排序的递归函数。我可以加载并运行所有内容,但是当数组为{3, 1, 8, 5}
时的输出将继续输出为{1, 3, 3, 3}
。我认为这与最小值的分配方式有关,但是我一直坚持到底在哪里。有什么建议么?
#include <iostream>
#include <conio.h>
#include <array>
using namespace std;
int arrLength = 4;
int minimum;
int counter = 0;
int sortedArr[];
int tempArr[];
void sortFunc(int, int);
int valueArr[4] = { 3,1,8,5 };
int tempArr[4] = {};
void main() {
cout << "Before sorting..." << endl;
for (int i = 0; i < 4; i++) {
cout << valueArr[i] << " ";
}
cout << endl;
sortFunc(4, counter);
cout << "After sorting..." << endl;
for (int i = 0; i < 4; i++) { //either broken here
cout << tempArr[i] << " ";
}
_getch();
}
void sortFunc(int size, int counter) {
minimum = valueArr[0];
for (int i = 1 + (counter); i < size; i++) { //or here
if (valueArr[i] < minimum) {
minimum = valueArr[i];
}
}
tempArr[counter] = minimum;
if (counter < size) {
counter++;
sortFunc(size, counter);
}
}
最佳答案
我无法清楚地看到如何稍微调整一下策略以使您的功能正常工作。我认为您需要通过交换元素来对数组进行排序。为此,您需要:
valueArr
复制到tempArr
。 tempArr
排序到位。这使valueArr
保持其原始状态。我想那是你的意图。 在
main
中,使用:// Copy valueArr to tempArr
std::copy(valueArr, valueArr+4, tempArr);
在
sortFunc
中,使用:void sortFunc(int size, int counter) {
if ( size == counter )
{
return;
}
int minimum = tempArr[counter];
for (int i = 1 + (counter); i < size; i++) {
if (tempArr[i] < minimum) {
minimum = tempArr[i];
std::swap(tempArr[counter], tempArr[i]);
}
}
sortFunc(size, counter+1);
}
建议进一步清理。
sortFunc
。 main
的返回类型更改为int
。 这是一个清理的版本。
#include <iostream>
#include <algorithm>
using namespace std;
void sortFunc(int arr[], int, int);
int main() {
cout << "Before sorting..." << endl;
int valueArr[4] = { 3,1,8,5 };
int tempArr[4] = {};
for (int i = 0; i < 4; i++) {
cout << valueArr[i] << " ";
}
cout << endl;
// Copy valueArr to tempArr
std::copy(valueArr, valueArr+4, tempArr);
sortFunc(tempArr, 4, 0);
cout << "After sorting..." << endl;
for (int i = 0; i < 4; i++) { //either broken here
cout << tempArr[i] << " ";
}
cout << endl;
}
void sortFunc(int arr[], int size, int counter) {
if ( size == counter )
{
return;
}
int minimum = arr[counter];
for (int i = 1 + (counter); i < size; i++) {
if (arr[i] < minimum) {
minimum = arr[i];
std::swap(arr[counter], arr[i]);
}
}
sortFunc(arr, size, counter+1);
}
关于c++ - C++中的递归选择无法完全正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42153012/