如果我有一個包含0和1的二進制值的列表,如下面的000111010110 ,我想將它排序到下面的000000111111如果你也知道如何做到這一點,最有效的方法是什麼?列表大小?現在我正在考慮有一個計數器,在我從開始到結束遍歷列表時,我只計算0的數量。然後,如果我通過numberOfZeros除listSize我得到numberOfOnes。然後我想着,而不是重新排序從零開始的列表,我只是創建一個新的列表。你會同意這是最有效的方法嗎?排序雙向列表
Q
排序雙向列表
1
A
回答
1
您的算法實現了經典bucket sort算法(其實現爲counting sort)的最原始版本。當數字範圍已知時,它是對數字進行排序的最快方法,並且(相對)較小。由於零和零是你所擁有的,所以你不需要在存儲分類中存在的一系列計數器:一個計數器就足夠了。
0
如果您有數字值,則可以使用匯編指令bitscan(x86彙編中的BSF)來計數位數。要創建「排序」值,您可以設置n + 1位,然後減1。這會將所有位設置在n + 1位的右側。
0
桶排序似乎是一種排序算法。
我不認爲有這樣的操作需要。我們知道沒有排序算法比N * logN更快。所以默認情況下它是錯誤的。
而所有你需要做的就是你一開始就說過的話。只要遍歷這個列表並計算零或者那個會給你O(n)複雜度的東西。然後,創建一個新的數組在開始之後計數爲零,然後是1。然後總共有N + N的複雜度,這使得O(n)的複雜性成爲可能。
而且只是因爲你只有兩個values.So既不快速排序或任何其他類型的可以做到這一點faster.There沒有更快的排序比NLOG(N)
相關問題
- 1. 排序的雙向鏈表
- 2. 如何雙向排序python列表,按降序排列數字,按升序排列字母排序?
- 3. 「已排序列表」和雙向或單向關係
- 4. 按降序排序雙向鏈接列表
- 5. 排序雙向鏈表從低到高
- 6. 排序的雙向鏈表的Java
- 7. 雙向鏈表的排序方法
- 8. 在雙向鏈表中排序插入
- 9. 在C排序問題雙向鏈表
- 10. 在雙向鏈表中插入排序
- 11. 雙向列表
- 12. 雙鏈表維護排序列表
- 13. 雙排序陣列
- 14. 雙向氣泡排序c#
- 15. PHP雙向合併排序
- 16. 雙向氣泡排序
- 17. Python Numpy Recarray排序雙向
- 18. 有道雙向排序
- 19. 排序的雙向矢量
- 20. 雙排序與反向
- 21. 交換插入排序不工作在雙向鏈接列表
- 22. 泡沫排序雙向鏈接列表Java
- 23. 插入排序雙向鏈接列表問題
- 24. Java排序雙向鏈接列表添加方法
- 25. 對雙精選列表進行排序
- 26. MFC序列化雙向鏈表
- 27. 向量的雙鏈表列指針雙向鏈接列表
- 28. 使用雙類型排序對象的陣列列表的排列列表
- 29. 排序雙鏈表Python
- 30. 「NullPointerException」排序雙鏈表時
如果您正在使用電腦的話位工作,多數民衆贊成,然後查看http://graphics.stanford.edu/~seander/bithacks.html的計數位設置部分。 –