成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Java數(shù)據(jù)結(jié)構(gòu)與算法——桶排序

DandJ / 553人閱讀

摘要:實(shí)際排序中,通常對(duì)每個(gè)桶中的元素繼續(xù)使用其他排序算法進(jìn)行排序,所以更多時(shí)候,桶排序會(huì)結(jié)合其他排序算法一起使用。

聲明:碼字不易,轉(zhuǎn)載請(qǐng)注明出處,歡迎文章下方討論交流。

前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會(huì)不定時(shí)更新,歡迎各位讀者監(jiān)督。本文從最簡單的一個(gè)排序算法——桶排序開始,分析桶排序的實(shí)現(xiàn)思路,代碼實(shí)現(xiàn),性能特點(diǎn)以及適用場(chǎng)景。

0、其他排序算法索引(待更)

java數(shù)據(jù)結(jié)構(gòu)與算法——快速排序
java數(shù)據(jù)結(jié)構(gòu)與算法——插入排序

1、桶排序思想

一個(gè)簡單例子:
對(duì)6個(gè)人的英語測(cè)試成績(1~10分)進(jìn)行排序。假如分?jǐn)?shù)是[6,5,8,8,10,9],用桶排序的思想就是準(zhǔn)備10個(gè)桶,編號(hào)依次為1~10,將成績放入對(duì)應(yīng)的桶中,例如6分放入6號(hào)桶,兩個(gè)8分放入8號(hào)桶...然后按照桶的標(biāo)號(hào)順序逐一輸出(有就輸出,沒有就不輸出),這就是桶排序的基本思想。

事實(shí)上,這只是一個(gè)簡易版,試想一下,如果待排序的元素跨度范圍比較大,例如1~10000,是不是需要10000個(gè)桶?實(shí)際上這種情況下,一個(gè)桶里并非總放一個(gè)元素,很多時(shí)候一個(gè)桶里放多個(gè)元素。其實(shí)真正的桶排序和散列表有一樣的原理。

實(shí)際排序中,通常對(duì)每個(gè)桶中的元素繼續(xù)使用其他排序算法進(jìn)行排序,所以更多時(shí)候,桶排序會(huì)結(jié)合其他排序算法一起使用。

2、桶排序代碼

在分析了桶排序的思想后,首先要知道待排序元素的范圍,以上述為例,聲明一個(gè)長度為10的數(shù)組作為10個(gè)桶,然后將成績逐一往桶中放時(shí),該桶的值+1,最終輸出倒序輸出數(shù)組下標(biāo),數(shù)組每個(gè)位置的值為幾就輸出幾次,這樣就能實(shí)現(xiàn)基本的桶排序。

public class BucketSort {
    private int[] buckets;
    private int[] array;
    
    public BucketSort(int range,int[] array){
        this.buckets = new int[range];
        this.array = array;
    }
    
    /*排序*/
    public void sort(){
        if(array!=null && array.length>1){
            for(int i=0;i=0; i--){
            for(int j=0;j

測(cè)試代碼:

public class SortTest {
    public static void main(String[] args) {
        testBucketsSort();
    }
    
    private static void testBucketsSort(){
        int[] array = {5,7,3,5,4,8,6,4,1,2};
        BucketSort bs = new BucketSort(10, array);
        bs.sort();
        bs.sortOut();//輸出打印排序
    }
}
3、桶排序性能特點(diǎn)

桶排序?qū)嶋H上只需要遍歷一遍所有的待排元素,然后依次放入指定的位置。如果加上輸出排序的時(shí)間,就要遍歷所有的桶。因此桶排序的時(shí)間復(fù)雜度是O(n+m),n是待排元素的個(gè)數(shù),m是桶的個(gè)數(shù),也就是待排元素的范圍。這個(gè)算法算是相當(dāng)快的排序算法了,但是空間復(fù)雜度比較大。

當(dāng)待排元素的大小范圍比較大,但待排元素個(gè)數(shù)比較少時(shí),空間浪費(fèi)就比較嚴(yán)重,待排元素分布月均勻,空間利用率越高,事實(shí)上這種情況很少見。

通過以上性能分析,可以得出桶排序的特點(diǎn):速度快且簡單,但同時(shí)空間利用率較低。當(dāng)待排數(shù)據(jù)跨度很大時(shí),空間利用率是無法忍受的。

4、桶排序適用場(chǎng)景

根據(jù)桶排序的特點(diǎn),桶排序一般適用于一些特定的環(huán)境,比如數(shù)據(jù)范圍較為局限或者有一些特定的要求,比如需要通過哈希映射快速獲取某些值,需要統(tǒng)計(jì)每個(gè)數(shù)的數(shù)量。但是這一切都以確認(rèn)數(shù)據(jù)的范圍為前提,如果范圍跨度過大,則考慮用其他算法。

其他排序算法索引(待更)

java數(shù)據(jù)結(jié)構(gòu)與算法——快速排序
java數(shù)據(jù)結(jié)構(gòu)與算法——插入排序

碼字不易,如對(duì)您有幫助,歡迎點(diǎn)贊收藏打賞^_^

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/71088.html

相關(guān)文章

  • 面試算法實(shí)踐國外大廠習(xí)題指南

    摘要:面試算法實(shí)踐與國外大廠習(xí)題指南翻譯自維護(hù)的倉庫,包含了在線練習(xí)算法概述與大廠習(xí)題實(shí)戰(zhàn)等內(nèi)容。面試算法實(shí)踐與國外大廠習(xí)題指南在線練習(xí)在線面試編程數(shù)據(jù)結(jié)構(gòu)鏈表即是由節(jié)點(diǎn)組成的線性集合,每個(gè)節(jié)點(diǎn)可以利用指針指向其他節(jié)點(diǎn)。 面試算法實(shí)踐與國外大廠習(xí)題指南 翻譯自 Kevin Naughton Jr. 維護(hù)的倉庫 interviews,包含了在線練習(xí)、算法概述與大廠習(xí)題實(shí)戰(zhàn)等內(nèi)容。筆者發(fā)現(xiàn)正好和...

    genedna 評(píng)論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)算法之美 - 排序、計(jì)數(shù)排序、基數(shù)排序

    摘要:之所以把計(jì)數(shù)排序桶排序基數(shù)排序放在一起比較,是因?yàn)樗鼈兊钠骄鶗r(shí)間復(fù)雜度都為。動(dòng)畫計(jì)數(shù)排序思想找出待排序的數(shù)組中最大和最小的元素。桶排序計(jì)數(shù)排序能派上用場(chǎng)嗎手機(jī)號(hào)碼有位,范圍太大,顯然不適合用這兩種排序算法。 showImg(https://segmentfault.com/img/bVbuF9e?w=900&h=500); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,只有內(nèi)功深厚者...

    Awbeci 評(píng)論0 收藏0
  • JavaScript 數(shù)據(jù)結(jié)構(gòu)算法之美 - 十大經(jīng)典排序算法匯總

    摘要:筆者寫的數(shù)據(jù)結(jié)構(gòu)與算法之美系列用的語言是,旨在入門數(shù)據(jù)結(jié)構(gòu)與算法和方便以后復(fù)習(xí)。這應(yīng)該是目前較為簡單的十大經(jīng)典排序算法的文章講解了吧。比如原本在的前面,而,排序之后,在的后面十大經(jīng)典排序算法冒泡排序思想冒泡排序只會(huì)操作相鄰的兩個(gè)數(shù)據(jù)。 showImg(https://segmentfault.com/img/bVbvHet); 1. 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就...

    zsy888 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)算法——線性排序

    摘要:實(shí)際上,桶排序的應(yīng)用場(chǎng)景十分的有限,對(duì)數(shù)據(jù)的要求比較苛刻。極端情況下,如果數(shù)據(jù)全部劃分到一個(gè)桶內(nèi),就變成了非線性排序了。 1. 回顧 前面已經(jīng)說完了幾種非線性排序,它們分別是時(shí)間復(fù)雜度為 O(n2) 、適合小規(guī)模數(shù)據(jù)的冒泡排序、選擇排序、插入排序,和應(yīng)用較廣泛的時(shí)間復(fù)雜度為 O(nlogn) 的希爾排序、歸并排序、快速排序。其實(shí)這幾種排序都有一個(gè)特性,那就是它們都是基于數(shù)據(jù)的比較和移動(dòng)...

    Allen 評(píng)論0 收藏0
  • Java數(shù)據(jù)結(jié)構(gòu)算法——插入排序

    摘要:當(dāng)序列本身有序時(shí),插入排序的時(shí)間復(fù)雜度為。因?yàn)榇藭r(shí)的分區(qū)內(nèi)數(shù)據(jù)往往是近似有序的,所以使用快排并不一定優(yōu)于插入排序。 聲明:碼字不易,轉(zhuǎn)載請(qǐng)注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會(huì)不定時(shí)更新,歡迎各位讀者監(jiān)督。本篇文章介紹排序算法中插入排序算法,包括插入排序的思路,適用場(chǎng)景,性能分析,java代碼等 0、其他排序算法索引(待更) java數(shù)據(jù)結(jié)構(gòu)與算法——快速...

    騫諱護(hù) 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<