這篇文章將為大家詳細講解有關jdk中如何實現計數排序,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創新互聯公司專注于石鼓企業網站建設,響應式網站建設,商城網站定制開發。石鼓網站建設公司,為石鼓等地區提供建站服務。全流程按需開發,專業設計,全程項目跟蹤,成都創新互聯公司專業和態度為您提供的服務
計數排序是一個非基于比較的排序算法,它的優勢在于在對一定范圍內的整數排序時,它的復雜度為Ο(n+k)(其中k是整數的范圍),快于任何比較排序算法。我們估計要有疑問了,這個排序算法這么快,為什么還存在其他的排序算法呢,這就需要要我們綜合時間復雜度和空間復雜度那個最優了。
Java底層對不同的數據實現了各種各樣的排序算法,而對于計數排序只有在比較byte類型的數字才有效,也就是說數字最大也就是256.Java底層對這個算法實現的相當精巧,基本實現過程如下:(詳情可以打開jdk java.util.Arrays.sort(byte[]))。
1:初始化一個計數數組,大小是輸入數組中的最大的數。
2:遍歷輸入數組,遇到一個數就在計數數組對應的位置上加一。例如:遇到7,就將計數數組第七個位置的數加一。
3:把計數數組直接覆蓋到輸出數組(節約空間)。
源碼如下:
在jdk中這段代碼還是存在優化的空間,我完全可以把初始化數組變得更小,更節省內存,即用多少初始化多少, 舉個例子:
比如說我輸入了一個數組{4, 1, 4, 2, 3},初始化數組大小為4即可,(按照算法導論中對計數排序的理論,即:計數數組的大小為排序數組中數字最大的數)
建立計數數組{0, 0, 0, 0}。
遍歷輸入數組:
{3, 4, 3, 2, 1} -> {0, 0, 1, 0}
{3, 4, 3, 2, 1} -> {0, 0, 1, 1}
{3, 4, 3, 2, 1} -> {0, 0, 2, 1}
{3, 4, 3, 2, 1} -> {0, 1, 2, 1}
{3, 4, 3, 2, 1} -> {1, 1, 2, 1}
計數數組現在是{1, 1, 2, 1},我們現在把它寫回到輸入數組里:
{0, 1, 2, 1} -> {1, 4, 3, 2, 1}
{0, 0, 2, 1} -> {1, 2, 3, 2, 1}
{0, 0, 1, 1} -> {1, 2, 3, 2, 1}
{0, 0, 0, 1} -> {1, 2, 3, 3, 1}
{0, 0, 0, 0} -> {1, 2, 3, 3, 4}
這樣就排好序了。
時間:O(n + k),n是輸入數組長度,k是最大的數的大小。
空間:O(n + k),n是輸入數組長度,k是最大的數的大小。
關于“jdk中如何實現計數排序”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
新聞名稱:jdk中如何實現計數排序
網站地址:http://m.2m8n56k.cn/article40/jcgeeo.html
成都網站建設公司_創新互聯,為您提供品牌網站設計、小程序開發、標簽優化、網站收錄、域名注冊、網站排名
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯