JAVA常见算法题(二十七)

题目:给定一个存放整数的数组,请写一个算法,把偶数移动到该数组的右边,奇数放在该数组的左边,请考虑时间和空间的最优算法。

package com.forezp.util;

/**
 * 题目:给定一个存放整数的数组,请写一个算法,
 * 把偶数移动到该数组的右边,奇数放在该数组的左边,请考虑时间和空间的最优算法。
 *
 * @author Administrator
 *
 */
public class ArrayDemo {

    //判断是否为偶数
    public static boolean isEven(int n){
        return (n & 1) == 0 ;
    }

    //判断是否为偶数
    public static boolean isEven2(int n){
         return (n % 2)==0;
    }

    //定义算法
    public void order(int[] arr){
        if(null == arr){
            return ;
        }

        int i = 0;
        int j = arr.length - 1 ;

        while(i<j){

            //i是偶数,j是奇数
            if(isEven(arr[i]) && !isEven(arr[j])){
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }else if(!isEven(arr[i]) && isEven(arr[j])){
                i++;
            }else if(isEven(arr[i]) && isEven(arr[j])){
                j--;
            }else{
                i++;
            }
        }

    }

    public static void main(String[] args) {
        ArrayDemo arrayDemo = new ArrayDemo();
        int[] arr = {4,3,5,2,10,6,7,22,23,34,45,56};
        arrayDemo.order(arr);
        for (int i : arr) {
            System.out.println(i);
        }

        System.out.println(isEven(1));
        System.out.println(isEven(12));
        System.out.println(isEven(13));
        System.out.println(isEven(14));
        System.out.println(isEven(15));
        System.out.println("--------------");
        System.out.println( 1 & 1);
        System.out.println( 12 & 1);
        System.out.println( 13 & 1);
        System.out.println( 14 & 1);
    }

}

运行结果:

上面第一个关于判断是否为偶数的方法:

时间: 2024-10-01 06:54:41

JAVA常见算法题(二十七)的相关文章

JAVA常见算法题(二十八)

package com.forezp.util; import java.util.Arrays; /** * 两个int数组,都是从小到大的的排列,请合并为一个新的数组,也是从小到到大的排列, * 请写出性能最优的算法.<br> * * * * @author Administrator * */ public class ArrayDemo1 { public static void main(String[] args) { int[] a = { 1,3,5,7,9}; int[] b

JAVA常见算法题(二十四)

package com.xiaowu.demo; //一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Demo24 { public static void main(String[] args) { f2(123454321); } // 方法一 public static void f1(int n) { if (n >= 10000 && n < 100000) { String s = String.va

JAVA常见算法题(二十九)

package com.forezp.util; import java.util.Scanner; /** * 判断输入的5个字符串的最大长度,并输出 * * * @author Administrator * */ public class StringDemo{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String[] str =new String[5]; for(int x

JAVA常见算法题(二十)

package com.xiaowu.demo; /** * * 打印出如下图案(菱形) * * * * @author WQ * */ public class Demo20 { public static void main(String[] args) { display(5); } public static void display(int h) { for (int i = 0; i < (h + 1) / 2; i++) { for (int j = 0; j < h / 2 -

JAVA常见算法题(二十三)

package com.xiaowu.demo; /** * 给一个不多于5位的正整数,要求:①求它是几位数:②逆序打印出各位数字. * * * @author WQ * */ public class Demo23 { public static void main(String[] args) { f(123789); } public static void f(long l) { String s = Long.toString(l); char[] c = s.toCharArray(

JAVA常见算法题(二十一)

package com.xiaowu.demo; //求1+2!+3!+...+20!的和. public class Demo21 { public static void main(String[] args) { sum(20); } public static void sum(int n) { long sum = 0; long fac = 1; for (int i = 1; i <= n; i++) { fac *= i; sum += fac; } System.out.pri

JAVA常见算法题(二)

package com.xiaowu.demo; /** * 判断101-2000之间有多少个素数,并输出所有素数. * 质数(prime number)又称素数,有无限个.质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数. * @author WQ * */ public class Demo2 { public static void main(String[] args) { prime(); } public static void prime() { int

JAVA常见算法题(十七)

package com.xiaowu.demo; //输出九九乘法表. public class Demo17 { public static void main(String[] args) { table(9); } /** * 我用白话文解释"\t"的意思是:在同一个缓冲区内横向跳8个空格,JDK1.5上是这样的,至于更高版本是否变化,那我就不太清楚了!! * (有时候也有书籍称"\t"为制表符,对齐时使用的) * * @param n */ public s

JAVA常见算法题(五)

package com.xiaowu.demo; /** * 利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示. * * * @author WQ * */ public class Demo5 { public static void main(String[] args) { score(90); } public static void score(int n) { char s = n >= 90 ? 'A' : (n