Поэтому я пытаюсь вставить число в массив в порядке возрастания, а затем распечатать массив, используя только обозначение указателя. Я попытался сделать это, найдя позицию, в которую будет вставлено число, а затем я пытаюсь сохранить все значения в этой позиции и после в позициях, расположенных ниже по массиву. Затем я хочу вставить число в его правильное положение, а затем переместить все числа обратно в их положение + 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;
}
Вот демонстрационная программа, которая показывает, как выполнить назначение с помощью стандартных алгоритмов
#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
Подход заключается в том, что вам нужно заполнить массив размещением чисел в порядке возрастания. В этом случае вы должны использовать метод бинарного поиска, чтобы определить позицию, в которой должно быть добавлено следующее число. И тогда вам просто нужно сдвинуть вправо все существующие элементы, начиная с этой позиции.