вставка чисел в массив с помощью обозначения указателя Переполнение стека

Поэтому я пытаюсь вставить число в массив в порядке возрастания, а затем распечатать массив, используя только обозначение указателя. Я попытался сделать это, найдя позицию, в которую будет вставлено число, а затем я пытаюсь сохранить все значения в этой позиции и после в позициях, расположенных ниже по массиву. Затем я хочу вставить число в его правильное положение, а затем переместить все числа обратно в их положение + 1. Однако я думаю, что мне что-то не хватает в моем обозначении указателя, потому что ни одна из моих проверок не показывается, поэтому мои циклы for даже не использовался. Любая помощь или совет будут оценены.

using namespace std;
int main(int argc, char *argv[])
{
int spot; // spot holder for the added number
int *pointer = NULL;

cout << "How many numbers do you want in your array" << endl;
int input;
cin >> input;
pointer = new int[input * 2 ];
for (int index = 0; index < input; index ++)
{
cout << "Enter integer number" << index + 1 << endl;
cin >> *(pointer + index);

}
for (int index = 0; index < input; index ++)
{
cout <<  *(pointer + index);
}
cout << endl;

cout << "What number would you like to add?" << endl;
int added;
cin >> added;

for (int index = 0; added < *(pointer + index); index++)
{
spot = index;
cout << "check .5: " << spot;
}
for (int index = spot; index < input + 1; index++)
{
*(pointer + input + index) = *(pointer + index); //& added
cout << "check 1: " << *(pointer + input + index);
}
*(pointer + spot) = added;
for (int index = spot + 1; index < input + 1; index++)
{
*(pointer + index) = *(pointer + index + input);
cout << "check 2" ;
}

for (int index = 0; index < input + 1; index ++)
{
cout <<  *(pointer + index);
}
cout << endl;
}

-5

Решение

Вот демонстрационная программа, которая показывает, как выполнить назначение с помощью стандартных алгоритмов

#include <iostream>
#include <algorithm>

int main()
{
const size_t N = 5;
int a[N] = { 2, 5, 1, 4, 3 };
int b[N];

int *first = b;
int *last  = b;

for ( int x : a )
{
auto p = std::upper_bound( first, last, x );

if ( p != last )
{
std::copy_backward( p, last, last + 1 );
}

*p = x;
++last;
}

for ( int x : b ) std::cout << x << ' ';
std::cout << std::endl;

return 0;
}

Выход

1 2 3 4 5

Подход заключается в том, что вам нужно заполнить массив размещением чисел в порядке возрастания. В этом случае вы должны использовать метод бинарного поиска, чтобы определить позицию, в которой должно быть добавлено следующее число. И тогда вам просто нужно сдвинуть вправо все существующие элементы, начиная с этой позиции.

1

Другие решения


По вопросам рекламы [email protected]