Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 排序数组时遇到问题。为什么赢了';我的数组排序不正确吗?_C++_Arrays_Sorting - Fatal编程技术网

C++ 排序数组时遇到问题。为什么赢了';我的数组排序不正确吗?

C++ 排序数组时遇到问题。为什么赢了';我的数组排序不正确吗?,c++,arrays,sorting,C++,Arrays,Sorting,我的程序需要从命令行读取数组的大小,然后用随机数填充数组。然后,它应该显示数组中已排序和未排序的内容 为循环创建一个,以便将随机数读入数组并显示未排序的内容。创建了嵌套在第一个循环中的第二个for循环,以便对数组中的内容进行排序 #include <time.h> #include <iostream> #include <iomanip> #include <cstdlib> using namespace std; int main(in

我的程序需要从命令行读取数组的大小,然后用随机数填充数组。然后,它应该显示数组中已排序和未排序的内容

为循环创建一个,以便将随机数读入数组并显示未排序的内容。创建了嵌套在第一个循环中的第二个for循环,以便对数组中的内容进行排序

#include <time.h>
#include <iostream>
#include <iomanip>
#include <cstdlib>


using namespace std;

int main(int argc, char * argv[], char **env)
{

    int SIZE = atoi(argv[1]);
    int *array = new int[SIZE];



    for(int i = 0; i < SIZE; i++)
    {
        array[i] = rand()% 1000;
        cout << i << ": " << array[i] << "\n";

        for(int j = 0; j < SIZE; j++)
        {
            if(array[j] > array[j + 1])
            {
                swap(array[j], array[j +1]);
            }

            cout << i << ": " << array[i] << "\n";
        }


    }


    return 0;
    }



I expect an output like

0: 350
1: 264
2: 897

0:264
1:350
2:897

I'm getting an output like
0:41
0:41
0:41
0:41
1:46
1:46
1:0
1:0
2:334
2:334
2:334
2:334
#包括
#包括
#包括
#包括
使用名称空间std;
int main(int argc,char*argv[],char**env)
{
int SIZE=atoi(argv[1]);
int*数组=新的int[大小];
对于(int i=0;icout直接的问题是,您的代码甚至在数组完全初始化之前就试图对其进行排序

您需要将主循环拆分为三个:

  • 第一个初始化数组的程序
  • 第二个用于对数组进行排序(这将包括气泡排序使用的内部循环)
  • 第三个是打印结果

另外,您还需要仔细考虑循环的边界条件。

直接的问题是,您的代码甚至在数组完全初始化之前就试图对其进行排序

您需要将主循环拆分为三个:

  • 第一个初始化数组的程序
  • 第二个用于对数组进行排序(这将包括气泡排序使用的内部循环)
  • 第三个是打印结果

另外,您还需要仔细考虑循环的边界条件。

因为您试图在数组初始化之前对其进行连续排序。此外,当
j==SIZE-1
时,您有未定义的行为,因为此时比较
array[j]>array[j+1]
是非法的。
array[j+1]
是无效的索引

与此相反:

for(int i = 0; i < SIZE; i++)
{
    array[i] = rand()% 1000;
    cout << i << ": " << array[i] << "\n";

    for(int j = 0; j < SIZE; j++)
    {
        if(array[j] > array[j + 1])
        {
            swap(array[j], array[j +1]);
        }

        cout << i << ": " << array[i] << "\n";
    }
}
for(int i=0;icout因为您试图在数组初始化之前对其进行连续排序。另外,当
j==SIZE-1
时,您有未定义的行为,因为此时比较
array[j]>array[j+1]
是非法的。
array[j+1]
是无效索引

与此相反:

for(int i = 0; i < SIZE; i++)
{
    array[i] = rand()% 1000;
    cout << i << ": " << array[i] << "\n";

    for(int j = 0; j < SIZE; j++)
    {
        if(array[j] > array[j + 1])
        {
            swap(array[j], array[j +1]);
        }

        cout << i << ": " << array[i] << "\n";
    }
}
for(int i=0;icout A suggestion.将用数据填充数组的代码与对数组进行排序的代码分开。这不会解决您的问题,但会使调试更容易。如前所述,您的程序具有未定义的行为,因为您正在访问尚未正确初始化的数组元素。A suggestion.将填充数组的代码分开使用数据和代码对数组进行排序。这不会解决您的问题,但会使调试变得更容易。如前所述,您的程序具有未定义的行为,因为您正在访问尚未正确初始化的数组元素。非常感谢您的帮助,现在效果非常好。编程的艺术当然是蜜蜂跪着感谢您的帮助r你的帮助,现在效果很好。编程的艺术当然是蜜蜂跪着感谢你的反馈,我真的很感激。它现在起作用:)谢谢你的反馈,我真的很感激。它现在起作用:)