所以我试图按升序将数字插入数组,然后仅使用指针表示法打印数组。我尝试通过找到数字插入位置的位置来尝试这样做,然后我尝试将所有值存储在该位置,然后存储在数组中的位置之后。然后我想在它正确的位置插入数字,然后将所有数字移回到它们的位置+ 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;
}
答案 0 :(得分:1)
这是一个演示程序,演示如何通过标准算法进行分配
#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
方法是您需要按升序填充数组放置数字。在这种情况下,您应该使用二进制搜索方法来确定必须添加下一个数字的位置。然后你只需要从这个位置开始向右移动所有存在的元素。