0
我被賦予了一個任務來排序填充(非負)整數的數組。用4個選項對數組進行排序的算法
他們應該被排序,使得輸出是按以下順序:
- 編號,其中它們中的除以4的餘數是0
- 編號,其中它們中的除以4的餘數是1
- 號碼,其中它們中的除以4的餘數是2個
- 編號,其中它們中的除以4的餘數是3
我試圖寫一個簡單的算法,應該在O(n)工作(任務是有效地編寫代碼)。
但我認爲這是一團糟,有幾個案例不起作用(例如,當我嘗試一個數組,其中前幾個數字剩餘3)。
任何有關如何解決這個問題的建議或更好的方法?
public static void sortByFour(int[] arr)
{
int zeroR = -1, oneR = 0, twoR = arr.length-1, threeR = arr.length;
do
{
if (arr[oneR]%4==1)
oneR++;
else if (arr[oneR]%4==0)
{
zeroR++;
int temp = arr[oneR];
arr[oneR] = arr[zeroR];
arr[zeroR] = temp;
oneR++;
}
else if (arr[oneR]%4==2)
{
twoR--;
int temp = arr[oneR];
arr[oneR] = arr[twoR];
arr[twoR] = temp;
}
else if (arr[oneR]%4==3)
{
threeR--;
int temp = arr[oneR];
arr[oneR] = arr[threeR];
arr[threeR] = temp;
}
} while (oneR < threeR && oneR < twoR);
}
好主意。就地方法的唯一缺點是它不穩定,而桶排序穩定。 –
這是「餘數」,而不是「提醒」(糾正問題),但「除數」似乎是您的代碼更合適的變量名稱(否則我會自己編輯它)。 – Dukeling
抱歉的初學者問題,但爲什麼這不適用於「curr ++」?從來沒有得到它從http://stackoverflow.com/questions/484462/difference-between-i-and-i-in-a-loop –