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

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

    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;
                }
            }
            
        }
    }
  • 相关阅读:
    hystrix 源码分析以及属性的配置
    golang官方包限流器使用和原理(golang.org/x/time/rate)
    pip通过指定分支和子目录从git仓库中拉取python包
    cgo使用示例总结
    python装饰器原理和用法总结
    centos7编译安装clang8(同时还会编译llvm的不少东西, 文中附带编译好的二进制压缩包)
    prometheus+alertmanager+granafa监控总结,安装基于docker-compose(长期更新)
    go条件变量的使用和原理
    canal+kafka订阅Mysql binlog将数据异构到elasticsearch(或其他存储方式)
    go对elasticsearch的增删改查
  • 原文地址:https://www.cnblogs.com/lixiaolun/p/5057332.html
Copyright © 2011-2022 走看看