Java排序算法之計數(shù)排序解析
Java計數(shù)排序解析
原理:找到數(shù)組中數(shù)值最大的元素,(如這里的8),創(chuàng)建一個長度為最大元素+1的臨時數(shù)組,(這里為9),這樣就可以把原始數(shù)組轉(zhuǎn)換為: 以原始數(shù)組元素值為下標(biāo),相同元素個數(shù)為值的臨時數(shù)組 如數(shù)組 [8,4,2,3,5] 經(jīng)過轉(zhuǎn)換后形成了 [0,0,1,1,1,1,0,0,1] 的數(shù)組,如下圖:
但是在一些情況下,這樣創(chuàng)建數(shù)組是不合適的,如[90,96,92,93,95] ,這就需要創(chuàng)建一個長度為97的數(shù)組,而這個數(shù)組前90個位置就被浪費(fèi)了,所以可以進(jìn)行優(yōu)化
優(yōu)化:用數(shù)組的最大值減去最小值,創(chuàng)建一個長度為差值+1的數(shù)組,保存每個元素時保存相對大小,如上面這個數(shù)組,差值為8-2=6,創(chuàng)建一個長度為7的數(shù)組,用每個元素減去最小值,然后用結(jié)果去轉(zhuǎn)換為下面的數(shù)組
代碼實現(xiàn)(java):
//測試 public static void main(String[] args) { int[] arr = {8,4,2,2,3,3,5}; countSort(arr); } public static void countSort(int[] arr){ //1.取出數(shù)組中的最大值和最小值 int max = arr[0]; int min = arr[0]; for (int i = 0; i < arr.length - 1; i++) { if (arr[i] < min) { min = arr[i]; } if (arr[i] > max) { max = arr[i]; } } //最大值和最小值的差值 int len = max - min; //創(chuàng)建差值+1長度的臨時數(shù)組 int[] tmp = new int[len + 1]; //遍歷原數(shù)組,將(元素-最小值)作為下標(biāo),元素個數(shù)為value,插入到臨時數(shù)組 for (int i : arr) { tmp[i-min] ++; } //遍歷臨時數(shù)組,每個下標(biāo)為值,元素值為次數(shù),依次打印 for (int i = 0; i < tmp.length; i++) { for (int j = i; j < tmp[i]+i; j++) { System.out.println(j + min); } } }
到此這篇關(guān)于Java排序算法之計數(shù)排序解析的文章就介紹到這了,更多相關(guān)Java計數(shù)排序解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring AOP面向切面編程實現(xiàn)原理方法詳解
這篇文章主要介紹了Spring AOP面向切面編程實現(xiàn)原理方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08一文詳解SpringBoot如何優(yōu)雅地實現(xiàn)異步調(diào)用
SpringBoot想必大家都用過,但是大家平時使用發(fā)布的接口大都是同步的,那么你知道如何優(yōu)雅的實現(xiàn)異步呢?這篇文章就來和大家詳細(xì)聊聊2023-03-03SpringBoot文件上傳接口并發(fā)性能調(diào)優(yōu)
在一個項目現(xiàn)場,文件上傳接口(文件500K)QPS只有30,這個并發(fā)性能確實堪憂,此文記錄出坑過程,文中通過代碼示例講解的非常詳細(xì),具有一定的參考價值,需要的朋友可以參考下2024-06-06springboot中如何使用openfeign進(jìn)行接口調(diào)用
這篇文章主要介紹了springboot中如何使用openfeign進(jìn)行接口調(diào)用問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07java組件commons-fileupload實現(xiàn)文件上傳、下載、在線打開
這篇文章主要介紹了java組件commons-fileupload實現(xiàn)文件上傳、下載、在線打開,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10