如何按升序对动态数组进行排序?
How do I sort a dynamic array in ascending order?
我有一个作业要求用户输入两个数字,它们是数组的大小,然后输入数组的元素。然后我必须将它们组合成一个数组并按升序对它们进行排序。问题是我必须只用动态数组来做。我已经组合了数组并尝试对它们进行排序,但每次都在该部分崩溃。这是我对数组进行排序的代码:
int *temp;
temp = &array1size;
for (int i = 0; i < *size1ptr; i++)
{
for (int j = 0; j < *size1ptr - 1; j++)
{
if (*(finalarray + j) > *(finalarray + j + 1))
{
temp = &*(finalarray + j);
*(finalarray + j) = *(finalarray + j + 1);
*(finalarray + j + 1) = *temp;
}
}/*End inner for loop*/
}/*End outer for loop*/
IT 在这部分崩溃了,我不知道为什么。这是我制作其他数组的一些其他代码:
int array1size, array2size;
int *array1ptr, *array2ptr, *size1ptr, *size2ptr, *finalarray, *finalptr;
cout << "enter size of first array: ";
cin >> array1size;
size1ptr = &array1size;
array1ptr = new int[*size1ptr];
cout << "Enter array content: ";
for (int i = 0; i < *size1ptr; i++)
{
cin >> *(array1ptr + i);
}
cout << "enter size of second array: ";
cin >> array2size;
size2ptr = &array2size;
array2ptr = new int[array2size];
cout << "Enter array content: ";
for (int i = 0; i < *size2ptr; i++)
{
cin >> *(array2ptr + i);
}
finalarray = new int[*size1ptr];
for (int i = 0; i < *size1ptr; i++)
{
*(finalarray + i) = *(array1ptr + i);
}
for (int i = 0; i < *size2ptr; i++)
{
*size1ptr += 1;
*(finalarray + *size1ptr - 1) = *(array2ptr + i);
}
如我的评论所述,您不能动态增加 C 样式数组的大小(如果您愿意,请使用 std::vector)
在您的情况下,您需要在创建时给出最终数组的最终大小(array1 和 array2 的大小之和),即
finalarray = new int[*size1ptr + *size2ptr];
我有一个作业要求用户输入两个数字,它们是数组的大小,然后输入数组的元素。然后我必须将它们组合成一个数组并按升序对它们进行排序。问题是我必须只用动态数组来做。我已经组合了数组并尝试对它们进行排序,但每次都在该部分崩溃。这是我对数组进行排序的代码:
int *temp;
temp = &array1size;
for (int i = 0; i < *size1ptr; i++)
{
for (int j = 0; j < *size1ptr - 1; j++)
{
if (*(finalarray + j) > *(finalarray + j + 1))
{
temp = &*(finalarray + j);
*(finalarray + j) = *(finalarray + j + 1);
*(finalarray + j + 1) = *temp;
}
}/*End inner for loop*/
}/*End outer for loop*/
IT 在这部分崩溃了,我不知道为什么。这是我制作其他数组的一些其他代码:
int array1size, array2size;
int *array1ptr, *array2ptr, *size1ptr, *size2ptr, *finalarray, *finalptr;
cout << "enter size of first array: ";
cin >> array1size;
size1ptr = &array1size;
array1ptr = new int[*size1ptr];
cout << "Enter array content: ";
for (int i = 0; i < *size1ptr; i++)
{
cin >> *(array1ptr + i);
}
cout << "enter size of second array: ";
cin >> array2size;
size2ptr = &array2size;
array2ptr = new int[array2size];
cout << "Enter array content: ";
for (int i = 0; i < *size2ptr; i++)
{
cin >> *(array2ptr + i);
}
finalarray = new int[*size1ptr];
for (int i = 0; i < *size1ptr; i++)
{
*(finalarray + i) = *(array1ptr + i);
}
for (int i = 0; i < *size2ptr; i++)
{
*size1ptr += 1;
*(finalarray + *size1ptr - 1) = *(array2ptr + i);
}
如我的评论所述,您不能动态增加 C 样式数组的大小(如果您愿意,请使用 std::vector)
在您的情况下,您需要在创建时给出最终数组的最终大小(array1 和 array2 的大小之和),即
finalarray = new int[*size1ptr + *size2ptr];