14_调整数组顺序使奇数位于偶数前面

来源:互联网 发布:mac合盖播放 编辑:程序博客网 时间:2024/06/03 19:39

Java版本:

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

输入:1 5 3 6 8 5 3 8
输出:1 5 3 3 5 8 6 8

import java.util.Scanner;public class Main {    private static void order(int[] data) {        if(data == null || data.length <2)            return;        int start = 0;        int end = data.length-1;        while(start<end){            //奇数在前,偶数在后            while(start<end && data[start]%2 == 1)                start++;            while(start<end && data[end]%2 == 0)                end--;            int temp = data[start];            data[start] = data[end];            data[end] = temp;        }    }    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        String inputString = sc.nextLine();        String[] stringArray = inputString.split("\\s+");        int length = stringArray.length;        int[] data = new int[length];        for(int i = 0;i < length;i++){            data[i]=Integer.parseInt(stringArray[i]);        }        order(data);        for(int i = 0;i < length;i++){            System.out.print(data[i] + " ");        }        sc.close();    }}

这里写图片描述

扩展性解法:

import java.util.Scanner;public class Main {    //奇数在前,偶数在后    private static boolean func1(int n) {           return (n % 2 == 1);    }    //负数在前,非负数在后    private static boolean func2(int n) {           return (n < 0);    }    //能被3整除在前,不能的在后    private static boolean func(int n) {            return (n % 3 == 0);    }    private static void order(int[] data) {        if(data == null || data.length <2)            return;        int start = 0;        int end = data.length-1;        while(start<end){                       while(start<end && func(data[start]))                start++;            while(start<end && !func(data[end]))                end--;            int temp = data[start];            data[start] = data[end];            data[end] = temp;        }    }    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        String inputString = sc.nextLine();        String[] stringArray = inputString.split("\\s+");        int length = stringArray.length;        int[] data = new int[length];        for(int i = 0;i < length;i++){            data[i]=Integer.parseInt(stringArray[i]);        }        order(data);        for(int i = 0;i < length;i++){            System.out.print(data[i] + " ");        }        sc.close();    }}
阅读全文
0 0
原创粉丝点击