【发布时间】:2011-02-28 20:11:59
【问题描述】:
用Java写一个静态方法:
public static void sortByFour (int[] arr)
接收一个包含非负数(零或正数)的数组作为参数,并按以下方式对数组进行排序:
所有能被四整除的数字都会出现在数组的开头。
数组中除以 4 余数为 1 的所有数字都将出现在它们之后。
数组中除以 4 余数为 2 的所有数字都将出现在它们之后。
将出现在数组末尾的所有余数(除以 4 余数为 3 的数)。
(每组数字的顺序无关紧要。)
方法必须尽可能高效。
以下是我写的,可惜效果不好……:(
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++;
}
}
如何修复或重写我的代码以使其正常运行?
【问题讨论】:
-
@VeeArr 好吧,很明显。但这是个好问题。
-
正确,但我试图解决它但它不起作用,这就是我寻求帮助的原因。
-
你为什么使用那个代码?我的意思是,你试图在那里实现的逻辑是什么?
-
-1 要求让其他人做你的作业。 Polygenlubricants 和 GEShafer 已经为您提供了很好的推动力。
-
-1 “帮我找出问题所在”和“帮我解决”(即使是“请”)是完全不同的东西。
标签: java arrays sorting modulo