编写一个Java静态方法:
public static void sortByFour (int[] arr)
该方法接收一个由非负数(零或正数)组成的数组作为参数,并按照以下方式对数组进行排序:
- 所有能被四整除的数字将出现在数组的开头。 - 随后,所有余数为 1 的被 4 整除的数字将出现在它们后面。 - 然后,所有余数为 2 的被 4 整除的数字将出现在它们后面。 - 最后,剩下的所有数字(即余数为 3 的被 4 整除的数字)将出现在数组的末尾。
(每个分组内数字的顺序不重要。)
该方法必须尽可能高效。
以下是我写的代码,但很不幸它并没有很好地工作... :(
public static void swap( int[] arr, int left, int right )
{
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
}
public static void sortByFour( int[] arr )
{
int left = 0;
int right = ( arr.length - 1 );
int mid = ( arr.length / 2 );
while ( left < right )
{
if ( ( arr[left] % 4 ) > ( arr[right] % 4 ) )
{
swap( arr, left, right );
right--;
}
if ( ( arr[left] % 4 ) == ( arr[right] % 4 ) )
left++;
else
left++;
}
}
如何修复或重写我的代码,以便它可以良好地工作?
if(condition) left++; else left++;
和left++;
是等价的,不是吗? - Bill the Lizard