C++基礎(chǔ)語(yǔ)法梳理:算法丨十大排序算法(二)
本期是C++基礎(chǔ)語(yǔ)法分享的第十六節(jié),今天給大家來(lái)梳理一下十大排序算法后五個(gè)!

歸并排序
歸并排序:把數(shù)據(jù)分為兩段,從兩段中逐個(gè)選最小的元素移入新數(shù)據(jù)段的末尾??蓮纳系较禄驈南碌缴线M(jìn)行。
希爾排序
希爾排序:每一輪按照事先決定的間隔進(jìn)行插入排序,間隔會(huì)依次縮小,最后一次一定要是1。
計(jì)數(shù)排序
計(jì)數(shù)排序:統(tǒng)計(jì)小于等于該元素值的元素的個(gè)數(shù)i,于是該元素就放在目標(biāo)數(shù)組的索引i位(i≥0)。
計(jì)數(shù)排序基于一個(gè)假設(shè),待排序數(shù)列的所有數(shù)均為整數(shù),且出現(xiàn)在(0,k)的區(qū)間之內(nèi)。
如果 k(待排數(shù)組的最大值) 過(guò)大則會(huì)引起較大的空間復(fù)雜度,一般是用來(lái)排序 0 到 100 之間的數(shù)字的最好的算法,但是它不適合按字母順序排序人名。
計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。
時(shí)間復(fù)雜度為 O(n+k),空間復(fù)雜度為 O(n+k)
算法的步驟如下:
1. 找出待排序的數(shù)組中最大和最小的元素
2. 統(tǒng)計(jì)數(shù)組中每個(gè)值為 i 的元素出現(xiàn)的次數(shù),存入數(shù)組 C 的第 i 項(xiàng)
3. 對(duì)所有的計(jì)數(shù)累加(從 C 中的第一個(gè)元素開(kāi)始,每一項(xiàng)和前一項(xiàng)相加)
4. 反向填充目標(biāo)數(shù)組:將每個(gè)元素 i 放在新數(shù)組的第 C[i] 項(xiàng),每放一個(gè)元素就將 C[i] 減去 1
桶排序
桶排序:將值為i的元素放入i號(hào)桶,最后依次把桶里的元素倒出來(lái)。
桶排序序思路:
1. 設(shè)置一個(gè)定量的數(shù)組當(dāng)作空桶子。
2. 尋訪序列,并且把項(xiàng)目一個(gè)一個(gè)放到對(duì)應(yīng)的桶子去。
3. 對(duì)每個(gè)不是空的桶子進(jìn)行排序。
4. 從不是空的桶子里把項(xiàng)目再放回原來(lái)的序列中。
假設(shè)數(shù)據(jù)分布在[0,100)之間,每個(gè)桶內(nèi)部用鏈表表示,在數(shù)據(jù)入桶的同時(shí)插入排序,然后把各個(gè)桶中的數(shù)據(jù)合并。
基數(shù)排序
基數(shù)排序:一種多關(guān)鍵字的排序算法,可用桶排序?qū)崿F(xiàn)。
今天的分享就到這里了,大家要好好學(xué)C++喲~
寫在最后:對(duì)于準(zhǔn)備學(xué)習(xí)C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內(nèi)功)不妨從現(xiàn)在開(kāi)始!
微信公眾號(hào):C語(yǔ)言編程學(xué)習(xí)基地
整理分享(多年學(xué)習(xí)的源碼、項(xiàng)目實(shí)戰(zhàn)視頻、項(xiàng)目筆記,基礎(chǔ)入門教程)
歡迎轉(zhuǎn)行和學(xué)習(xí)編程的伙伴,利用更多的資料學(xué)習(xí)成長(zhǎng)比自己琢磨更快哦!
