本周又因為疫情閉組了神郊,這周把以前的作品稍稍完善了一下,然后都拍成視頻發(fā)到了嗶哩嗶哩上了,然后又把git看完了碗誉。本來這周是打算把前端基礎進階看完的,但是在看到JS十大排序算法是卡住了夯膀,十個題看了很長時間诗充,剛開始在博客上看,在博客上看的時候搞不懂他是怎樣排序的诱建,看的挺吃力蝴蜓,然后在嗶哩嗶哩找了點視頻看,算是把排序的運算過程明白了俺猿,但是個別的在用代碼實現(xiàn)的時候還是有一些不明白茎匠,個別的一兩個實在不想在死摳下去了,想在以后做題的時候在慢慢看吧押袍。下面是我理解不到位的一種排序算法:
桶排序
桶排序是計數(shù)排序的優(yōu)化版诵冒,原理都是一樣的:分治法+空間換時間。
將數(shù)組進行分組谊惭,減少排序的數(shù)量汽馋,再對子數(shù)組進行排序侮东,最后合并即可得到結果。
堆排序
在物理數(shù)據(jù)層的表示如下:
堆排序豹芯,是選擇排序的優(yōu)化版本悄雅,利用數(shù)據(jù)結構——樹,對數(shù)據(jù)進行管理铁蹈。
以大頂堆為例:
通過構建大頂堆
將堆頂?shù)淖畲髷?shù)拿出宽闲,與堆底的葉子節(jié)點進行交換
接著,樹剪掉最大數(shù)的葉子
再對堆進行調(diào)整握牧,重新變成大頂堆
返回步驟2容诬,以此循環(huán),直至取出所有數(shù)
構建大頂堆
從第一個非葉子節(jié)點開始沿腰,調(diào)整它所在的子樹
調(diào)整下標1節(jié)點的子樹后览徒,向上繼續(xù)調(diào)整它的父節(jié)點(下標0)所在的子樹
最后,完成整個樹的調(diào)整矫俺,構建好大頂堆吱殉。
逐個抽出堆頂最大值
堆頂數(shù)字與最末尾的葉子數(shù)字交換,抽出堆頂數(shù)字9厘托。
此時友雳,數(shù)字9位置固定下來,樹剪掉9所在的葉子铅匹。然后押赊,重新構建大頂堆。
大頂堆構建好后包斑,繼續(xù)抽出堆頂數(shù)字8流礁,然后再次重新構建大頂堆。
最后罗丰,所有節(jié)點抽出完成神帅,代表排序已完成