一、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
注意:使用当前数组实现,不能重新开辟一个同等长度的数组实现。
思路:要想实现相对顺序不变,就需要记录一下,已经排好序的奇数的位置以及又发现的奇数的位置。将已经排好序的奇数与发现的奇数之间的数据向后一定一个位置,给发现的奇数空出一个位置。
二、算法实现
class Demo{ public static void main(String[] args){ int[] arr={4,2,1,5,7,6,9,3}; reOrderArray(arr); print(arr); } // 打印数组 public static void print(int[] arr){ for(int i=0;i<arr.length;i++){ System.out.print(arr[i]+" "); } System.out.println(); } // 数组重排 public static void reOrderArray(int [] array) { int m=0;//记录排好序的奇数的位置 int j=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; j=i; break; } } for(j++;j<array.length;j++){ if(array[j]%2==1){ int temp=array[j]; int tj=j; m++; //将array[m]位置空出来 留着放奇数,将元素后移一个位置 for(;tj>m;tj--){ array[tj]=array[tj-1]; } array[m]=temp; } } } }