对于家庭作业,我需要编写可以对数组进行排序的方法,排序方法应该尽可能高效。
- 数组的开头将出现所有除以 4 的数字,没有余数。
- 后面是除以 4 余数为 1 的所有数字
- 后面是除以 4 余数为 2 的所有数字
- 在数组的末尾将是所有其他数字(那些除以 4 和其余 3 的数字)。
我试过这组 4 个指针:
2 个指针 起初 0 和 1 的余数
2 指针在数组的最后一个 2 和 3 的余数
到目前为止,这是我能找到的(当然有问题),感谢您的帮助!
public static void sortByFour (int[] arr)
{
int temp;
int noRemainderIndex = 0;
int remainder1Index = 1;
int remainder2Index = arr.length - 2;
int remainder3Index = arr.length - 1;
for (int i = 0; i < arr.length; i++)
{
if (arr[i] % 4 == 0)
{
temp = arr[noRemainderIndex];
arr[noRemainderIndex] = arr[i];
arr[i] = temp;
noRemainderIndex++;
remainder1Index++;
}
else if (arr[i] % 4 == 1)
{
temp = arr[remainder1Index];
arr[remainder1Index] = arr[i];
arr[i] = temp;
remainder1Index++;
}
else if (arr[i] % 4 == 2)
{
temp = arr[remainder2Index];
arr[remainder2Index] = arr[i];
arr[i] = temp;
remainder2Index--;
}
else if (arr[i] % 4 == 3)
{
temp = arr[remainder3Index];
arr[remainder3Index] = temp = arr[i];
arr[i] = temp;
remainder3Index--;
remainder2Index--;
}
}