调整数组顺序使奇数位于偶数前面,并按顺序排列(2种方法)

从表面看好像这道题目很简单,其实做起来并没有想象中简单,个人觉得比较困难的点在于当奇数偶数已经分开但顺序没有排列的时候,对两半部分数组进行操作是稍微有些复杂的。提供了两种解法,希望大家能够有所借鉴。

import java.util.Arrays;public class reOrderArray {public void reOrderArrayDemo1(int[] array) {int p1 = 0;int p2 = array.length – 1;int i ;while (p1 < p2) {if (array[p1] % 2 == 1 && p1 < p2) { //p1的值不为偶数,向后移动p1++;}if (array[p2] % 2 == 0 && p2 > p1) { //p2的值不为奇数,向前移动p2–;}//当指针p1所在位置的值是偶数且指针p2所在位置的值是奇数时,将两位置处的值进行倒换if (array[p1] % 2 == 0 && array[p2] % 2 == 1) {int temp = array[p1];array[p1] = array[p2];array[p2] = temp;}}for (i = 0; i < array.length;i++) {if(array[i] % 2 == 0){ //当数组元素为奇数时,使指针不断向后移动,直到遇到偶数停止,并将此时的位置记录break;}}reOrderArray.sort(array , 0 , i);reOrderArray.sort(array , i , array.length);}public static void sort(int array[], int begin , int end) { //对前面为奇数 后面为偶数的数组进行排序for(int i = begin;i < end;i++){int Min = i;for(int j = i + 1;j < end;j++){if(array[j] < array[Min]){Min = j;}}if(Min != i){int temp = array[Min];array[Min] = array[i];array[i] = temp;}}}public void reOrderArrayDemo2(int[] array){int[] copyOfArray = Arrays.copyOf(array , array.length); //重新开辟一个数组,将原数组进行复制Arrays.sort(copyOfArray);//我承认我无耻的直接调用了排序的方法 =。=||int flag = 0; //对数组下标进行标记/*** 对copyOfArray数组进行遍历,遇到奇数进行取出,并放到array数组中,,并使flag + 1*/for(int i = 0;i < copyOfArray.length;i++){if(copyOfArray[i] % 2 == 1){array[flag++] = copyOfArray[i];}}/*** 再次遍历,取出偶数,放到array数组中,同上*/for(int i = 0;i < copyOfArray.length;i++){if(copyOfArray[i] % 2 == 0){array[flag++] = copyOfArray[i];}}}public static void main(String args[]) {reOrderArray r = new reOrderArray();int[] array = {2 , 7 , 1 , 2 , 3 , 4 , 5 , 7 , 4};r.reOrderArrayDemo1(array);System.out.println();for(int i = 0;i < array.length;i++){System.out.print(array[i] + " ");}}}

黑夜下,撕开那张面具尽是怠倦的容颜,

调整数组顺序使奇数位于偶数前面,并按顺序排列(2种方法)

相关文章:

你感兴趣的文章:

标签云: