C语言训练-1244-数列有序

Problem Description
有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数m,请将该数插入到序列中,并使新的序列仍然有序。
Input
输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0表示输入数据的结束,本行不做处理。
Output
对于每个测试实例,输出插入新的元素后的数列。
Sample Input
3 3
1 2 4
0 0
Sample Output
1 2 3 4

#include<bits/stdc++.h>
int main() {
  int n,m,i,t,j,k;
  while(scanf("%d %d",&n,&m),n != 0||m != 0)   //当输入n不等于0或者m不等于0的时候继续获取n和m的值,直到获取到n和m同时为0的值
  {
    int a[101];
  for(i=0; i<n; i++)
  {
    scanf("%d",&a[i]);     //依次获取n个数字并将他们依次存放在数组里
  }
  a[n] = m;            //将需要插入的值M赋值给数组的下标N的那个位置
  for(j = n-1;j >= 0; j--)    //从数组最后开始遍历后面的一个数和前一个数进行比较,后面的数小于前面得数则进行交换
  {
    if(a[j]>a[j+1])                 //三元组交换法(好像是这么叫的)
    {k = a[j];
    a[j] = a[j+1];
    a[j+1] = k;
  }else
            break;
  }
  for(i = 0; i <= n ; i++){           //控制输出字符间的空格,如果是最后一个就不在输出字符后输出空格,否则输出
    if(i==n){
      printf("%d",a[i]);}
      else
         printf("%d ",a[i]);
    }
  printf("\n");
  }
  return 0;
}

刚开始学习,太多不明白的地方,这题也是借鉴了大佬的思路然后跟着大佬做的,可能有不完善的地方。
大佬原题链接:
https://blog.csdn.net/better_space/article/details/52196372

猜你喜欢

转载自blog.csdn.net/weixin_43450493/article/details/83956510