1.力扣_调整数组使奇数位于偶数前面
相对位置可能变化的情况:利用双指针left、right,左右同时遍历,左边偶数停止遍历,右边奇数停止遍历,交换left和right对应的值即可。
/**
* 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
**/
public class Num21_奇数位于偶数之前 {
public int[] exchange(int[] nums) {
//双指针i,j,i指向最前面,j指向最后面,i找偶数,j找奇数,找到交换即可
int i=0;
int j=nums.length-1;
while(i<j){
while((i<j)&&(nums[i]&1)!=0){//奇数
i++;
}
while((i<j)&&(nums[j]&1)==0){
j--;
}
if(i<j){
swap(nums,i,j);
}
}
return nums;
}
private void swap(int[] nums, int i, int j) {
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
}
2.调整数组顺序使奇数位于偶数前面且相对位置不变__牛客网
思路:利用插入排序思想,奇数不断前插即可
import java.util.*;
public class Solution {
public void reOrderArray(int [] array) {
int len=array.length;
int k=0;//记录已经排序好的奇数的个数
for(int i=0;i<len;i++){
if((array[i]&1)==1){
int j=i;
//将奇数j交换到k+1位置【奇数不断前插】
while(j>k){
int temp=array[j];
array[j]=array[j-1];
array[j-1]=temp;
j--;
}
//出循环奇数j就交换到了k+1位置,k++继续循环
k++;
}
}
}
}