我正在尝试对整数数组进行排序,使所有偶数都在奇数之前,而不使用任何外部库。 您可能会从以下位置认识到这一点:http://codingbat.com/prob/p105771
"返回一个数组,其中包含与给定数组完全相同的数字,但重新排列,以便所有偶数都位于所有奇数之前。除此之外,数字可以按任何顺序排列。您可以修改并返回给定的数组,或者创建一个新数组。 " 我有实现此目标的代码:
public int[] evenOdd(int[] nums) {
int c=0;
int c2=0;
int [] nums2=new int[nums.length];
for(int i=0;i<nums.length;i++)
{
if(nums[i]%2==0)
{
nums2[c]=nums[i];
c++;
}
else
{
nums2[nums.length-c2-1]=nums[i];
c2++;
}
}
return nums2;
}
我还通过调用 array.sort() 来解决这个问题,然后按索引插入数字,增加 2,然后插入余数。这也有效。
那么,长话短说—— future 是否有更优雅的方式来实现这个目标? 谢谢!
最佳答案
只是我的评论的后续。以下是如何在 O(n)
内完成此操作,无需额外空间:
public class Main {
public static void main(String[] args) {
evenOdd(new int[]{1, 2, 3, 4, 5, 6, 7});
evenOdd(new int[]{2, 3, 4, 5, 6, 7});
evenOdd(new int[]{1, 1, 1, 1, 1});
evenOdd(new int[]{2, 2, 2, 2});
}
public static void evenOdd(int[] a) {
int firstOdd = 0;
for (int i = 0; i < a.length; ++i) {
if (a[i] % 2 == 0) {
int t = a[firstOdd];
a[firstOdd] = a[i];
a[i] = t;
firstOdd++;
// } else {
// else is redundant, just leave odd in-place
}
}
System.out.println(Arrays.toString(a));
}
}
关于java - 有没有一种方法可以更优雅地将数组排序为偶数和奇数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888534/