自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

拜托,面試別再問我計(jì)數(shù)排序了!??!

開發(fā) 開發(fā)工具
時(shí)間復(fù)雜度為O(n)的排序,除了基數(shù)排序(Radix Sort),還有計(jì)數(shù)排序(Counting Sort)。今天,1分鐘,通過幾幅圖,爭取讓大家搞懂計(jì)數(shù)排序。

排序,面試中,問的比較多。

時(shí)間復(fù)雜度為O(n)的排序,除了基數(shù)排序(Radix Sort),還有計(jì)數(shù)排序(Counting Sort)。今天,1分鐘,通過幾幅圖,爭取讓大家搞懂計(jì)數(shù)排序。

[[247748]]

計(jì)數(shù)排序的適用范圍?

待排序的元素在某一個(gè)范圍[MIN, MAX]之間。

畫外音:很多業(yè)務(wù)場景是符合這一場景,例如uint32的數(shù)字排序位于[0, 2^32]之間。

計(jì)數(shù)排序的空間復(fù)雜度?

計(jì)數(shù)排序需要一個(gè)輔助空間,空間大小為O(MAX-MIN),用來存儲(chǔ)所有元素出現(xiàn)次數(shù)(“計(jì)數(shù)”)。

畫外音:計(jì)數(shù)排序的核心是,空間換時(shí)間。

計(jì)數(shù)排序的關(guān)鍵步驟?

  • 步驟一:掃描待排序數(shù)據(jù)arr[N],使用計(jì)數(shù)數(shù)組counting[MAX-MIN],對(duì)每一個(gè)arr[N]中出現(xiàn)的元素進(jìn)行計(jì)數(shù);
  • 步驟二:掃描計(jì)數(shù)數(shù)組counting[],還原arr[N],排序結(jié)束;

舉個(gè)栗子:

假設(shè)待排序的數(shù)組,

  1. arr={5, 3, 7, 1, 8, 2, 9, 4, 7, 2, 6, 6, 2, 6, 6} 

很容易發(fā)現(xiàn),待排序的元素在[0, 10]之間,可以用counting[0,10]來存儲(chǔ)計(jì)數(shù)。

***步:統(tǒng)計(jì)計(jì)數(shù)

掃描未排序的數(shù)組arr[N],對(duì)每一個(gè)出現(xiàn)的元素進(jìn)行計(jì)數(shù)。

掃描完畢后,計(jì)數(shù)數(shù)組counting[0, 10]會(huì)變成上圖中的樣子,如粉色示意,6這個(gè)元素在arr[N]中出現(xiàn)了4次,在counting[0, 10]中,下標(biāo)為6的位置計(jì)數(shù)是4。

第二步:還原數(shù)組

掃描計(jì)數(shù)數(shù)組counting[0, 10],通過每個(gè)元素的計(jì)數(shù),還原arr[N]。

如上圖粉色示意,count[0, 10]下標(biāo)為6的位置計(jì)數(shù)是4,排完序是4個(gè)連續(xù)的6。

從counting下標(biāo)MIN到MAX,逐個(gè)還原,填滿arr[N]時(shí),排序結(jié)束。

神奇不神奇!!!

計(jì)數(shù)排序(Counting Sort),總結(jié):

  • 計(jì)數(shù)排序,時(shí)間復(fù)雜度為O(n);
  • 當(dāng)待排序元素個(gè)數(shù)很多,但值域范圍很窄時(shí),計(jì)數(shù)排序是很節(jié)省空間的;

希望這一分鐘,大家有收獲。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2018-11-01 13:49:23

桶排序排序面試

2018-09-28 05:25:53

TopK算法代碼

2020-04-22 11:19:07

貪心算法動(dòng)態(tài)規(guī)劃

2018-11-06 11:40:19

時(shí)間復(fù)雜度面試算法

2021-01-22 10:09:23

簡歷求職者面試

2019-04-16 13:30:05

表達(dá)式求值數(shù)據(jù)結(jié)構(gòu)算法

2020-03-30 17:20:54

B+樹SQL索引

2019-01-08 15:11:50

最大值最小值算法

2020-04-16 08:22:11

HTTPS加解密協(xié)議

2022-03-14 10:14:43

底層系統(tǒng)Nacos

2020-09-02 08:04:59

多線程互聯(lián)網(wǎng)高并發(fā)

2020-12-11 09:24:19

Elasticsear存儲(chǔ)數(shù)據(jù)

2018-11-09 09:34:05

面試Spring Clou底層

2020-09-24 14:40:55

Python 開發(fā)編程語言

2015-02-13 10:42:31

前端工具Dreamweaver

2019-07-10 10:06:24

面試官三次握手四次揮手

2019-08-29 09:49:50

2019-12-17 09:29:02

數(shù)據(jù)庫架構(gòu)分庫分表

2020-08-26 08:18:39

數(shù)據(jù)索引查詢

2019-03-12 14:48:29

路由器XBOXPS4
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)