开发者社区> 云栖-lxl> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

简介: 如果不考虑奇数和奇数,偶数和偶数之间的相对位置不变。那么只需要两个指针分别指向数组的头和尾,依次比较。 1. 如果头指针指向的数组位置为奇数,那么就判断尾指针指向的数组位置的奇偶性。如果是奇数,则头指针后移一个位置,如果是偶数,则尾指针前移一个位置。
+关注继续查看

如果不考虑奇数和奇数,偶数和偶数之间的相对位置不变。那么只需要两个指针分别指向数组的头和尾,依次比较。

1. 如果头指针指向的数组位置为奇数,那么就判断尾指针指向的数组位置的奇偶性。如果是奇数,则头指针后移一个位置,如果是偶数,则尾指针前移一个位置。

2. 如果头指针指向的数组位置为偶数,那么就判断尾指针指向的数组位置的奇偶性。如果是奇数,则交换头尾指针指向的数组元素,如果是偶数,则尾指针前移一个位置。

代码如下:

public class Q13_ReOrderArray {

    public static void main(String[] args) {
        int []array = {1,2,3,4,5,6,7,8,9,10,11,12,13};
        reOrderArray(array);
        for(int i=0;i<array.length;i++)
        {
            System.out.print(array[i]+" ");
        }
    }
    public static void reOrderArray(int []array)
    {
        int i=0;
        int j=array.length-1;
        while(i<j)
        {
            if(array[i]%2==1)//奇数
            {
                if(array[j]%2==1)//奇数
                {
                    i++;
                }else//偶数
                {
                    j--;
                }
            }else//偶数
            {
                if(array[j]%2==1)//奇数
                {
                    //交换array[i]和array[j]
                    int temp = array[i];
                    array[i] = array[j];
                    array[j] = temp;
                }else//偶数
                {
                    j--;
                }
            }
        }
    }
}

 

如果要保证奇数和奇数,偶数和偶数之间的相对位置不变。

首先寻找第一个奇数,并将其放在0号位置。然后将第一个奇数之前的元素全部往后移一位。

依次在第一个奇数之后的元素中寻找奇数,并做移动操作。就可以保证原来的相对顺序。

public class q13_reOrderArray {

    public static void main(String[] args) {
        int []array = {2,4,6,1,3,5,7};
        reOrderArray2(array);
        for(int i=0;i<array.length;i++)
        {
            System.out.print(array[i]+" ");
        }
    }
    public static void reOrderArray2(int []array)
    {
        int j=0;//记录第一个为奇数的位置
        int m=0;//记录排好序的奇数的最后一个位置
        for(int i=0;i<array.length;i++)
        {    
            if(array[i]%2==1)//找到第一个奇数
            {
                int temp = array[i];//记录第一个奇数
                int ti=i;
                for(;ti>0;ti--)
                {
                    array[ti]=array[ti-1];//将第一个奇数之前的所有元素往后移一个位置
                }
                array[0] = temp;//将第一个奇数放到array[0]位置
                j=i;
                break;
            }
        }
        for(++j;j<array.length;j++)//依次寻找剩余的奇数
        {
            if(array[j]%2==1)
            {
                int temp = array[j];
                int tj = j;
                for(;tj>m;tj--)
                {
                    array[tj]=array[tj-1];
                }
                array[++m]=temp;
            }
        }
        
    }
}

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【脚趾 Offer 21 】调整数组顺序使奇数位于偶数前面
【脚趾 Offer 21 】调整数组顺序使奇数位于偶数前面
0 0
调整数组顺序使奇数位于偶数前面(简单难度)
调整数组顺序使奇数位于偶数前面(简单难度)
0 0
输入一个整形数组,实现一个函数,来调整该数组中数字的顺序//使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
输入一个整形数组,实现一个函数,来调整该数组中数字的顺序//使得数组中所有奇数位于数组的前半部分,所有偶数位于数组的后半部分
0 0
AcWing 32. 调整数组顺序使奇数位于偶数前面
AcWing 32. 调整数组顺序使奇数位于偶数前面
0 0
每日一练(11):调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
0 0
面试 6:调整数组顺序使奇数位于偶数前面
今天给大家带来的是 《剑指 Offer》习题:调整数组顺序使奇数位于偶数前面,纯 Java 实现希望大家多加思考。 面试题:输入一个整型数组,实现一个函数来调整该数组中的数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分,希望时间复杂度尽量小。
2174 0
[剑指offer] 调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
850 0
【37】调整数组顺序使奇数位于偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得所有奇数位于前面半部分,偶数位于后半部分。 分析: 1. 方案一:最朴素做法是枚举数组,发现一个奇数就把数字放到前面,然后移到后面的数字。
1123 0
剑指offer(07)-调整数组顺序使奇数位于偶数前面【转】
来源:http://www.acmerblog.com/offer-6-2429/ 题目来自剑指offer系列 九度 1516 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
607 0
+关注
云栖-lxl
java程序员
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载