给定一个整数数组,请调整数组中数的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
一头一尾指针往中间扫描
import java.util.Arrays;
public class OddEvenSortTest {
private static boolean IsOddNumber(int data)
{
return (data & 1) == 1;
}
private static void OddEvenSort(int[] a)
{
if(a.length == 0)
return;
int end = a.length - 1;
int begin = 0;
while(begin < end)
{
//如果begin指针指向的是奇数,正常,向右移动
if(IsOddNumber(a[begin]))
begin++;
//如果end指针指向的是偶数,正常,向左移
else if(!IsOddNumber(a[end]))
end--;
else {
int t = a[begin];
a[begin] = a[end];
a[end] = t;
}
}
}
public static void main(String[] args)
{
int a[] = {1,13,4,7,54,
9678,3246,956,3456,234,5,6,7,89,5};
OddEvenSort(a);
System.out.println(Arrays.toString(a));
//for(int i = 0; i < a.length; i++)
// System.out.print (a[i]);
}
}
一前一后指针往后扫描
import java.util.Arrays;
public class OddEvenSortTest2 {
private static boolean IsOddNumber(int data)
{
return (data & 1) == 1;
}
// private static void swap(int a, int b)
// {
// int t = a;
// a = b;
// b = t;
// }
private static void OddEvenSort2(int a[])
{
if(a.length == 0)
return;
int i = -1;
for(int j = 0; j < a.length; j++)
{
//a[j]指向奇数,交换
if(IsOddNumber(a[j]))
{
i = i + 1;
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
int t = a[i+1];
a[i+1] = a[a.length-1];
a[a.length-1] = t;
}
public static void main(String[] args)
{
int a[] = {1,13,4,7,54,
9678,3246,956,3456,234,5,6,7,89,5};
System.out.println(a.length);
OddEvenSort2(a);
System.out.println(Arrays.toString(a));
//for(int i = 0; i < a.length; i++)
// System.out.print (a[i]);
}
}