题目要求:
调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。
如数组:[1,2,3,4,5,6]
调整后可能是:[1, 5, 3, 4, 2, 6]
算法思路1:
题目的要求是奇数位于前面,所以我们从最后开始找,类似于冒泡排序,如果前偶后奇,就进行交换
代码如下:
public static void change(int[] arr){
for (int i = 0; i < arr.length-1 ; i++) {
for (int j = arr.length-1; j >0 ; j--) {
if(arr[j-1]%2==0&&arr[j]%2==1){
int tmp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=tmp;
}
}
}
}
算法思路2:奇数位于偶数之前,所以我们可以从左向右找偶数然后停止,从右向左找到奇数然后停止,然后交换两个数字,直到相遇。
第一个大的循环为
while(i<j)
循环内就需要去找奇数和偶数了
while(((arr[i]%2)!=0)&&i<j){
i++;
}
while(((arr[j]%2==0)&&i<j)){
j--;
}
然后进行交换
整体代码如下
public class Test4 {
public static int[] change(int[] arr){
int i=0;
int j=arr.length-1;
while(i<j){
while(((arr[i]%2)!=0)&&i<j){
i++;
}
while(((arr[j]%2==0)&&i<j)){
j--;
}
int tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
return arr;
}
public static void main(String[] args) {
int[] a={1,2,3,4,5,6};
change(a);
System.out.println(Arrays.toString(a));
}
}