不移动数组的插入法

题目大意:

对已经排好的顺序(由小到大),插入一个数字。输出也是由小到大。

输入: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来判断插入一次。

posted @ 2018-03-26 23:56  神韵袖藏  阅读(144)  评论(0编辑  收藏  举报