如何按升序对动态数组进行排序?

时间:2015-09-11 04:42:51

标签: c++ arrays sorting dynamic

我有一项任务是让用户输入两个数字,这些数字是数组的大小,然后输入数组的元素。然后我必须将它们组合成一个数组并按升序对它们进行排序。问题是我必须只使用动态数组。我已经组合了数组并尝试对它们进行排序,但每次都会崩溃。这是我对数组进行排序的代码:

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);

}

1 个答案:

答案 0 :(得分:2)

正如我的评论中所提到的,你不能动态增加C风格数组的大小(如果你愿意,那就使用std::vector

在您的情况下,您需要在创建时给出最终数组的最终大小(array1和array2的大小之和),即

finalarray = new int[*size1ptr + *size2ptr];