介绍两种算法:
第一种是分别从数组的两边的下标开始,最前面的下标依次递增,如果碰到偶数继续遍历,如果碰到奇数则停止循环,记住当前位置。最后面的下标依次递减,如果碰到奇数继续遍历,如果碰到了偶数停止循环。当两个循环都停止之后,一个是奇数,一个偶数,这个时候互换它们的位置。
比如说一个数组 int【】 a={1,2,3,4,5};
整个过程如图所示,第一个是奇数1,循环停止,后边的第一个是5继续,然后遇到了4,这时候把1和4进行交换,重新进行一次循环当左边遇到右边,代码执行完毕
具体代码如下:
public class Hello{
public static void main(String[] args){
int[] a={1,2,3,4,5};
int left=0;
int right=a.length-1;
while(left<right)
{
while(left<right&&a[left]%2==0)
{
left++;
}
while(left<right&&a[left]%2!=0)
{
right--;
}
if(left<right)
{
int temp=a[left];
a[left]=a[right];
a[right]=temp;
}
}
for(int i=0;i<a.length;i++)
{
System.out.println(a[i]);
}
}
}
第二种办法
整个过程如上图所示
i下标一直往后走,当碰到偶数,a[i]就和a[d]进行交换,然后d继续往后走,重复这个过程,直到i走到最后一个下标处。
代码如下:
public static void main(String[] args)
{
int[] a={1,2,3,4,5};
int d=0;
for(int i=0;i<a.length;i++)
{
if(a[i]%2==0)
{
int temp=a[i];
a[i]=a[d];
a[d]=temp;
d++;
}
}