C ++选择排序算法中的逻辑错误?

问题描述 投票:0回答:1

我是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 ++中),或者逻辑本身存在问题吗?

c++ arrays sorting logic
1个回答
0
投票

这是实现选择排序的一种很奇怪的方法。据我所知,您在那里犯了几个错误。首先,您不能在第一个for循环中使用arr.size(),因为这会导致第二个超出限制,从而导致意外行为。如果碰巧那些是常规数组,您会遇到很好的分段错误。即使您没有运行时错误,也需要注意这一点。另一方面,这里的主要问题是由您使用索引的方式以及您实际上并不需要第二个数组引起的。

这里有此算法的示例。

© www.soinside.com 2019 - 2024. All rights reserved.