【算法入门漫画】:“排序算法” 大总结
冒泡排序:
漫畫:什么是冒泡排序?
選擇排序:
漫畫:什么是選擇排序?
插入排序:
漫畫:什么是插入排序?
此外還有冒泡排序的變種,雞尾酒排序:
漫畫:什么是雞尾酒排序?
第三梯隊的排序算法有什么共同點呢?它們的平均時間復雜度都是O(n^2)。
冒泡排序、選擇排序、插入排序之間,究竟有什么樣的差別呢?
首先從性能來分析,冒泡排序和插入排序的元素比較交換次數取決于原始數組的有序程度。
如果原始數組本來已經接近有序,只需要較少的比較交換次數即可完成排序。比如下面這個數組,只有7和8是逆序的:
如果原始數組大部分元素無序,則需要較多的比較交換次數。比如下面這個數組,絕大部分元素都是無序的:
在此基礎上,插入排序的性能略高于冒泡排序。為什么這么說呢?因為冒泡排序每兩個元素之間的交換是彼此獨立的,比如A和B交換,B和C交換,C和D交換:
而插入排序的元素交換是連續的,比如把B賦值給A,把C賦值給B,把D賦值給C,最后把A賦值給D:
顯然,歸并排序的連續交換方式省去了許多無謂的交換操作。
再來說說選擇排序,選擇排序和前面兩者不太一樣,它的元素比較交換次數是固定的,和原始數組的有序程度無關。
因此,當原始數組接近有序時,插入排序性能最優;當原始數組大部分元素無序時,選擇排序性能最優。
下面再說說排序的穩定性:
冒泡排序和插入排序是穩定排序,值相同的元素在排序后仍然保持原本的先后順序。
選擇排序是不穩定排序,值相同的元素在排序后不一定保持原本的先后順序。
希爾排序:
漫畫:什么是希爾排序?
快速排序:
漫畫:什么是快速排序?
歸并排序:
漫畫:什么是歸并排序?
堆排序:
漫畫:什么是堆排序?
第二梯隊的排序算法有什么共同點呢?它們的性能比第三梯隊要高一個量級,其中希爾排序的平均時間復雜度最快可以達到O(n^1.3),快速排序、歸并排序、堆排序的平均時間復雜度是O(nlogn)。
快速排序、歸并排序、堆排序之間,究竟有什么樣的差別呢?
還是先從性能來分析,雖然快速排序的平均時間復雜度是O(nlogn),但是在極端情況下,最壞時間復雜度是O(n^2)。
而歸并排序和堆排序的時間復雜度穩定在O(nlogn)。
至于平均時間復雜度,雖然三者同樣都是O(nlogn),但是堆排序比前兩者的性能略低一些。為什么呢?主要是由于二叉堆的父子節點在內存中并不連續。
在訪問內存數據時,對于順序存儲的數據,讀寫效率往往是最高的。根據CPU的空間局部性原理,CPU在每次訪問數據的時候,會把內存中相鄰的數據也一并存入緩存。這樣一來,CPU以后再訪問鄰近的數據就不需要重新訪問內存,而是訪問CPU緩存,從而大大提升了程序執行的效率。
下圖是有些夸張的示意:
在堆排序的過程中,常常需要父子節點之間進行比較和交換,而父子節點在數組中的位置并不是相鄰,而是相差兩倍左右:
反觀快速排序和歸并排序,無論是快速排序中把元素移動到pivot兩側,還是進行歸并排序中的merge操作,都是按照數組元素的自然順序依次進行比較和交換操作。
因此,堆排序的平均性能比快速排序和歸并排序略低。
至于排序的穩定性,歸并排序是穩定排序,快速排序和堆排序是不穩定排序。
此外,快速排序和堆排序是原地排序,不需要開辟額外空間。而歸并排序是非原地排序,在merge操作的時候需要借助額外的輔助數組來完成。
計數排序:
漫畫:什么是計數排序?
桶排序:
漫畫:什么是桶排序?
基數排序:
漫畫:什么是基數排序?
第一梯隊的排序算法有什么共同點呢?它們的性能比第二梯隊又要高出一個量級,都屬于線性時間復雜度的排序算法。
雖然計數排序、桶排序、基數排序同為線性排序算法,但它們的時間復雜度有著很大不同:
計數排序的時間復雜度是O(n+m),其中m是原始數組的整數范圍。
桶排序的時間復雜度是O(n),這是在分桶數量是n的前提下。
基數排序的時間復雜度是O(k(n+m)),其中k是元素的最大位數,m是每一位的取值范圍。
至于排序的穩定性,這三種排序算法都屬于穩定排序。
有哪些又出門又奇葩的排序算法呢?
睡眠排序
猴子排序
珠排序
漫畫:三種 “奇葩” 的排序算法
這三種排序算法體現出了發明者天馬行空的想象力,大家可以拿來娛樂一下,但是在現實工作中如有排序需求,可千萬不要調用它們啊!
—————END—————
備注:公眾號菜單包含了整理了一本AI小抄,非常適合在通勤路上用學習。
往期精彩回顧2019年公眾號文章精選適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(第一部分)備注:加入本站微信群或者qq群,請回復“加群”加入知識星球(4500+用戶,ID:92416895),請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的【算法入门漫画】:“排序算法” 大总结的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 特征工程与特征选择架构性好文
 - 下一篇: 30+个必知的《人工智能》会议清单