不移动数组的插入法
题目大意:
对已经排好的顺序(由小到大),插入一个数字。输出也是由小到大。
输入:3 3
1 2 4
输出:1 2 3 4
代码如下:
#include<iostream>
using namespace std;
int num[1000];
int main()
{
int n, m;
while (scanf("%d%d", &n, &m) && (n+m))
{
bool flag = true;
int Inum;
int k=0;
for (int i = 0; i < n; i++)
{
cin >> num[k];
if (num[k] >= m&&flag)
{
Inum = num[k];
num[k] = m;
k++;
num[k] = Inum;
flag = false;
}
k++;
}
if (flag)
{
num[k] = m;
}
for (int j = 0; j <= n; j++)
{
cout << num[j];
if (j < n){ cout << " "; }
}
cout << endl;
}
return 0;
}
if (num[k] >= m&&flag)
{
Inum = num[k];
num[k] = m;
k++;
num[k] = Inum;
flag = false;
}
这段代码非常重要,如果num[i]比m大就将它插入;注意:如果不考虑有几个数都比m大,那么就会使得几个插入。所以我们插入一次就可以了
用flag来判断插入一次。