调整数组使奇数全部都位于偶数前面

输入一个整数数组,实现一个函数,来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,所有偶数位于数组的后半部分。


对于一个数组,要调换它的奇数位和偶数位的话,我们有很多种方法,我这里呢想到了两种简单易懂的方法,也是让初学者易于接受的方法。我着重描述第二种方法吧。有什么不合理的地方呢,还请大家受累指教!
方法1.
在给出了一个已知的数组后,我们再 定义一个新的数组,用来存放我们调换位置过后的数组的元素,既然题目要求我们将奇数位和偶数位分开来放,那我们就将奇数和偶数分别拿出来,按照奇数位在前,偶数位在后的顺序,放到新建的数组当中即可。
方法2.
我们不用创建新的数组,这里要用到的方法就是在原本数组当中进行位置的重新排序。
我这里为了排序后的数组便于观察,根据排序后的数组arr【】={0123456789},这样子的话排序前的数组就为arr【】={0516273849},这样子这个数组的奇数位是01234,偶数位是56789,正确排序后的结果清晰可见,这个地方大家可以根据自己的爱好随便设计数字顺序。但是如何将这个数组进行排序呢?
首先,第一位0是奇数位,它就不用移动了,所以我们要移动的就是剩下的4个奇数位。
下面一个奇数位是arr【2】=1,它要和arr【1】=5进行交换位置。

int tmp = arr[2];
     arr[2] = arr[1]; 
     arr[1] = tmp;

下面一个奇数位是arr【4】,它要和arr【3】进行交换位置;然后arr【3】再和arr【2】交 换位置。

 int tmp = arr[4];
     arr[4] = arr[3]; 
     arr[3] = tmp;

     int tmp = arr[3];
     arr[3] = arr[2]; 
     arr[2] = tmp;
 下面一个奇数位是arr【6】,它要和arr【5】进行交换位置;然后arr【5】再和arr【4】交换位置;然后arr【4】再和arr【3】交换位置。
int tmp = arr[6];
     arr[6] = arr[5]; 
     arr[5] = tmp;

     int tmp = arr[5];
     arr[5] = arr[4]; 
     arr[4] = tmp;

     int tmp = arr[4];
     arr[4] = arr[3]; 
     arr[3] = tmp;

这样子做思路清晰,可以看出什么代码都有一个规律,我们总结出以下循环代码:

int arr[]={0,5,1,6,2,7,3,8,4,9};
    int size=sizeof(arr)/sizeof(arr[0]);
    int i = 0;
    for(i=2;i<=size-2;i+=2)
    {
        int j = i;
        for(j=i;j>(i/2);j--)
        {
        int tmp = arr[j];
         arr[j] = arr[j-1];
         arr[j-1] = tmp;
        }

    }

我用的是比较简单原始的方式,感觉挺low的,都有点拿不出手,不过肯定有其他大佬想出高大上的代码,希望大家共同学习共同分享,大家一起进步岂不是美滋滋!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值