計數排序
如果只有藍色和紅色 你計數藍色元素和紅色元素
[b1 r1 r2 b2 b3 r3 r4 b4 r5]
,並在for循環中你算你 你有blue: 4
red: 5
然後要素你知道結果表是[ r r r r r b b b b]
,你可以知道索引範圍,其中紅色元素和藍色元素(last紅色元素是{} red_count -1和最後一個藍色元素是{red_count} + {} blue_count -1)保存此值redIndex和blueIndex
你做第二個表,並從循環結束你搜索元素,最後是R5它的紅色,那他的指數應該是4,你遞減redIndex
[b1 r1 r2 b2 b3 r3 r4 b4 __] blueIndex:8
[__ __ __ __ r5 __ __ __ __] redIndex:3
[b1 r1 r2 b2 b3 r3 r4 __ __] blueIndex:7
[__ __ __ __ r5 __ __ __ b4] redIndex:3
[b1 r1 r2 b2 b3 r3 __ __ __] blueIndex:7
[__ __ __ r4 r5 __ __ __ b4] redIndex:2
.....
項排序O(2N)更快的方式,但與巨大的內存使用情況時的各種數據
如果'a'數組只包含卡片顏色,爲什麼不計算它們然後通過填充適當的值來重新創建數組? – rostok 2014-09-01 16:06:42
@rostok按照OP的建議,這將不再適用。 – dasblinkenlight 2014-09-01 16:17:57
這有幫助嗎? http://csjobinterview.wordpress.com/2012/03/30/array-stable-partition/ – 2014-09-01 16:55:12