奇偶分离

  数据结构课上所留思考题:在表中,实现将技奇数排列在表的前面,偶数排列在表的后面。


偏差思路:刚开始看着道题时,觉得比较简单,遇见奇数向前“扔”即可。但在实现过程中,涉及移动数据时,思路不清晰,无法实现。后来看了老师给的代码,经过一点时间才得以理解。


代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int a[100],i,j,k,t,n;
 while(scanf("%d",&n)!=-1)
  {
      for(i=0;i<n;i++)
        scanf("%d",&a[i]);
      for(i=1;i<n;i++)
    {
        if(a[i]%2==1)
        {
            t=a[i];
            for(j=i;j>0;j--)
            {
                a[j]=a[j-1];
            }
            a[0]=t;

        }
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
  }
    return 0;
}


巧妙之处,是每次从 i=1开始,的这样就把 i=0的位置空了出来。在循环中,每次遇到奇数时,都将第一个元素到本次找到的元素之前的一个元素向后移动,把i=0的位置空出来,(覆盖掉了原来位置上的奇数,将本次找的奇数排在最前面的位置。)

补充:第一个元素不用管。它会被挤在奇偶数的分界处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐乐_16

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值