我試圖延長以下代碼來對數組進行排序,如果我添加了一個第三值「C」的陣列。這將有可能做,而只保留一個循環。以下代碼將使用兩個可能的值「A」和「B」對數組進行排序。尋找一個O(N)排序爲僅具有3個可能值
public class TestSort
{
public static void main(String args[])
{
char f[] = {'A','B','B','A','B','B','A','B','A','A','B'};
int k = 0, t = f.length-1;
while(k < t)
{
if(f[k] == 'A')
k = k + 1;
else if(f[k] == 'B')
{
char m = f[t];
f[t] = f[k];
f[k] = m;
t = t - 1;
}
}
System.out.print("\nSorted List\n");
for(char i : f)
System.out.print(i + ", ");
System.out.println();
}
}
這是一種嘗試。我不知道我是否在正確的軌道上。
public class TestSort
{
static char f[] = {'C','A','B','A','C','B','A','B','C','C','B','A','B'};
//static char f[] = {'A','A','A','A','A','C','A','C','A','A','C','A','C'};
//static char f[] = {'C','B','B','B','C','B','B','B','C','C','B','C','B'};
//static char f[] = {'A','B','B','B','A','B','C','B','A','A','B','A','B'};
public static void main(String args[])
{
int j = 0, k = 0, t = f.length-1, l = f.length-1;
while(t >= 0)
{
if(f[k] == 'A')
k = k + 1;
else if(f[k] == 'B')
{
char m = f[j];
f[j] = f[k];
f[k] = m;
j = j + 1;
}
else if(f[k] == 'C')
{
char m = f[l];
f[l] = f[k];
f[k] = m;
l = l - 1;
}
for(char i : f)
System.out.print(i + ", ");
System.out.println();
}
}
}
你有沒有嘗試什麼嗎? – 2011-04-16 03:21:24
是否有與B's一樣多的A? – Ben 2011-04-16 03:26:06
計算器上的荷蘭國旗的檢索提出這:http://stackoverflow.com/questions/2621905/sort-array-of-size-n(及其他)。 – 2011-04-16 03:42:26