我正在尝试编写一个通过选择对一个小的数组排序的递归函数。我可以加载并运行所有内容,但是当数组为{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/

    10-12 00:33
    查看更多