C+中的逻辑错误+;选择排序算法? 我是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; } #包括 #包括 使用名称空间std; 数组未排序{3,4,1,5,7,2,8,9,6,0}; 无效打印数组(数组arr){ 整数计数=0; 用于(int i:arr){ 如果(计数

C+中的逻辑错误+;选择排序算法? 我是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; } #包括 #包括 使用名称空间std; 数组未排序{3,4,1,5,7,2,8,9,6,0}; 无效打印数组(数组arr){ 整数计数=0; 用于(int i:arr){ 如果(计数,c++,arrays,sorting,logic,C++,Arrays,Sorting,Logic,实现选择排序的方法很奇怪。据我所知,您在这里犯了几个错误。首先,您不能使用arr.size()在第一个for循环中,因为这会导致第二个for循环超出限制,从而导致意外行为。如果碰巧这些是规则数组,则会出现很好的分段错误。即使没有出现运行时错误,也需要注意这一点。 另一方面,这里的主要问题是由使用索引的方式以及实际上不需要第二个数组引起的 这里有一个这个算法的例子 #include<iostream> #include<vector> using namespace st

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

这里有一个这个算法的例子

#include<iostream>
#include<vector>

using namespace std;

int main()
{   
    vector<int> array(5);
    int aux;

    array[0]=10;
    array[1]=2;
    array[2]=45;
    array[3]=-5;
    array[4]=0;

    for(int i=0; i<array.size()-1; i++)
    {
        for(int j=i+1; j<array.size(); j++)
        {
            if(array[j]<array[i])
            {
                aux=array[j];
                array[j]=array[i];
                array[i]=aux;
            }
        }
    }
}
#包括
#包括
使用名称空间std;
int main()
{   
矢量阵列(5);
int aux;
数组[0]=10;
数组[1]=2;
数组[2]=45;
数组[3]=-5;
数组[4]=0;

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

这里有一个这个算法的例子

#include<iostream>
#include<vector>

using namespace std;

int main()
{   
    vector<int> array(5);
    int aux;

    array[0]=10;
    array[1]=2;
    array[2]=45;
    array[3]=-5;
    array[4]=0;

    for(int i=0; i<array.size()-1; i++)
    {
        for(int j=i+1; j<array.size(); j++)
        {
            if(array[j]<array[i])
            {
                aux=array[j];
                array[j]=array[i];
                array[i]=aux;
            }
        }
    }
}
#包括
#包括
使用名称空间std;
int main()
{   
矢量阵列(5);
int aux;
数组[0]=10;
数组[1]=2;
数组[2]=45;
数组[3]=-5;
数组[4]=0;

对于(inti=0;i这两种实现都是错误的。我刚刚更正了@Adrisui3的答案。 正确的解决方案:

#include<iostream>
#include<vector>

using namespace std;

int main()
{   
    vector<int> array(5);
    int aux;

    array[0] = 10;
    array[1] = 2;
    array[2] = 45;
    array[3] = -5;
    array[4] = 0;

    for(int i = 0; i < array.size(); i++)
    {
        int min = i;
        for(int j = i+1; j < array.size(); j++)
        {
            if(array[j] < array[min])
            {
                min = j;

            }
        }

        if (i != min)
        {
            aux = array[i];
            array[i] = array[min] ;
            array[min] = aux;
        }
    }
    for(int k = 0; k < array.size(); k++)
    {
        std::cout << array[k] << std::endl;
    }

}
#包括
#包括
使用名称空间std;
int main()
{   
矢量阵列(5);
int aux;
数组[0]=10;
数组[1]=2;
数组[2]=45;
数组[3]=-5;
数组[4]=0;
对于(int i=0;istd::cout这两个实现都是错误的。我刚刚更正了@Adrisui3的答案。
正确的解决方案:

#include<iostream>
#include<vector>

using namespace std;

int main()
{   
    vector<int> array(5);
    int aux;

    array[0] = 10;
    array[1] = 2;
    array[2] = 45;
    array[3] = -5;
    array[4] = 0;

    for(int i = 0; i < array.size(); i++)
    {
        int min = i;
        for(int j = i+1; j < array.size(); j++)
        {
            if(array[j] < array[min])
            {
                min = j;

            }
        }

        if (i != min)
        {
            aux = array[i];
            array[i] = array[min] ;
            array[min] = aux;
        }
    }
    for(int k = 0; k < array.size(); k++)
    {
        std::cout << array[k] << std::endl;
    }

}
#包括
#包括
使用名称空间std;
int main()
{   
矢量阵列(5);
int aux;
数组[0]=10;
数组[1]=2;
数组[2]=45;
数组[3]=-5;
数组[4]=0;
对于(int i=0;istd::听起来您可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看它与预期的偏差。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:
arr
中的值是什么?如果mallest value位于
arr
的末尾,它将被复制到每个元素中除了NathanOliver关于调试的建议之外,我们还需要一个函数来回答您的问题。这应该包括一个
main()
函数,该函数说明如何调用
选择\u sort()
function.@AlanBirtles事实上最后一个值是零!arr的值是{3,4,1,5,7,2,8,9,6,0}。现在这完全有道理了,我在那里看到了逻辑错误,谢谢!如果(arr[I+1]
,有些人不擅长
if(arr[I+1]
。当
I
达到其最大值
arr.size()
-1,
arr[I+1]
将超出范围。听起来您可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,您可以逐行执行程序,并查看它与预期的偏差。如果您要进行任何编程,这是一个必不可少的工具。进一步阅读:
中的值是什么>arr
?如果最小值位于
arr
的末尾,它将被复制到每个元素中。除了NathanOliver关于调试的建议之外,我们还需要一个函数来回答您的问题。这应该包括一个
main()
函数,该函数说明如何调用
选择\u sort()
function.@AlanBirtles事实上最后一个值是零!arr的值是{3,4,1,5,7,2,8,9,6,0}。现在这完全有道理了,我在那里看到了逻辑错误,谢谢!如果(arr[I+1]
,有些人不擅长
if(arr[I+1]
。当
I
达到其最大值
arr.size()
-1,
arr[I+1]
将被禁止。嘿!你说得对,vector消耗更多内存!我的错,对不起。嘿!你说得对,vector消耗更多内存!我的错,对不起。