数据结构算法题/将数组中元素奇数排在前面偶数在后面(前面奇数和后面的偶数不需要有序)

  处理策略是定义两个指针pHead,pTail并令其初始指向数组头节点和尾节点。pHead从前往后找应该放在尾部的偶数节点,pTail从后往前找应该放在头部的奇数节点,若pHead位于pTail之前则交换二者内容,否则结束处理过程。

处理流程如下图所示。从图中可以看出时间复杂度为O(n)。下面代码中外层的循环是接着上次交换后的front和end继续走的,所以是O(n).

对于用例:   1,2,4,5,3

处理结果为:1,3,5,4,2

下面给出在java语言下的实现:

import java.util.Arrays;

public class OddEvenNumber {

    public static void change(int a[]) //将数组a中奇数放在前面,偶数放在后面
    {
        int len = a.length;
        if(len <= 0)   //数组长度为0则返回
            return ;
        int front = 0, end = len-1;//设置两个指针,一个指向头部,一个指向尾部
        while(front<end)//因为这里是接着上次交换后的front和end继续走的,所以是O(n)
        {
//            while(front<len && (a[front]&1)==1)  //从前往后找偶数
            while(front<len && a[front]%2==1)  //从前往后找偶数,前面如果是奇数,那么继续往后走
                front++;
            while(end>=0 && a[end]%2==0)   //从后往前找奇数,如果后面是偶数,那么继续往前走
                end--;
            if(front<end)//每次互换一组奇数和偶数
            {
                int swap = a[front];   //将奇数往前挪,偶数往后挪
                a[front] = a[end];
                a[end] = swap;
            }
        }
    }


    public static void main(String[] args) {
        int[] arr = {1,2,5,2,4,7,12,3,57,100,5};
        change(arr);
        System.out.println(Arrays.toString(arr));
    }
}

转自https://blog.csdn.net/u010033948/article/details/51025075?utm_source=copy 
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值