插入有序问题

问题引入:
将一个整数m插入到升序数组a中去,使得插入后的数组a任然有序。
1 2 3 4 7 8 9
1 2 3 4 5 7 8 9

#include<stdio.h>
int main()
{
 printf("请输入数组元素个数n\n");
 int n;//数组元素个数
 scanf("%d",&n);
 int a[n];
 int data;//保存当前输入的数据
 int k = 0;//当前输入的是第几个数据
 int m;
 int i,j;
 for(m=0;m<n;m++)
 {
  printf("请输入第%d个数据\n",k);
  scanf("%d",&data);
  if(k==0)//当前是第一个数据
  {
   a[0] = data;
  }
  else//不是第一个
  {
   for(i=0;i<k;i++)//现在只输入了k个元素
   {
    if(data < a[i])//比较m和a[i]的大小
    {
     break;//打到打不过为止
    }
   }
   //打不过a[i]
   //第二步,把后面的数据依次往后挪动一个位置,再把输入的这个数插入+
   //if(m>a[n-2])//m是最大的
   if(i == k)//m是最大的
   {
    a[k] = data;
   }
   else//data不是最大的
   {
    for(j=k-1;j>=i;j--)
    {
     a[j+1] = a[j];
    }
    a[i] = data;
   }
  }  
  k++;
  for(i=0;i<k;i++)
  {
   printf("%d ",a[i]);
  }
  printf("\n");
 }
 for(i=0;i<n;i++)
 {
  printf("%d ",a[i]);
 }
 printf("\n");
 return 0;
}

关注博主不迷路,博主带你上高速!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值