C数组非递减顺序插入值

时间:2013-11-26 23:34:06

标签: c arrays insert

我正在编写一个以非递减顺序排列数组的程序;然后,它在序列中插入一个值。我可以很容易地在数组的开头和中间得到数字,但每当我添加一个应该在最后的数字时,我会一直得到0.我哪里出错?

#include <stdio.h>

int main()
{
  int array[10];
  int i, j, n, m, temp, key, pos;

  printf("Enter number of elements:\n");
  scanf("%d", &n);
  printf("Enter the elements:\n");
  for (i = 0; i < n; i++)
  {
    scanf("%d", &array[i]);
  }
  printf("Input array elements:\n");
  for (i = 0; i < n; i++)
  {
    printf("%d\n", array[i]);
  }
  for (i = 0; i < n; i++)
  {
    for (j = i + 1; j < n; j++)
    {
      if (array[i] > array[j])
      {
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
      }
    }
  }
  printf("Sorted list is\n");
  for (i = 0; i < n; i++)
  {
    printf("%d\n", array[i]);
  }
  printf("Enter the element to be inserted X:\n");
  scanf("%d", &key);
  for (i = 0; ; i++)
  {
    if (key < array[i])
    {
      pos = i;
      break;
    }
  }
  m = n - pos + 1 ;
  for (i = 0; i <= m; i++)
  {
    array[n - i + 2] = array[n - i + 1] ;
  }
  array[pos] = key;
  printf("Final list is:\n");
  for (i = 0; i < n + 1; i++)
  {
    printf("%d\n", array[i]);
  }
}

1 个答案:

答案 0 :(得分:1)

如果要输入的数字大于所有元素,则以下循环会产生问题。

...
for (i = 0; ; i++)
{
 if (key < array[i])
 {
   pos = i;
   break;
 }
}

如果数字最大,那么pos将是垃圾而不是n。数组的默认值是垃圾。 用它替换它。

for (i = 0;i<n ; i++)
{
 if (key < array[i])
 {
  break;
 }
}
pos = i;
...