常见排序算法总结(实现原理,稳定度,使用场景,时间复杂度)
排序算法總結:實現原理,時間復雜度,使用場景,穩定度。
冒泡排序的實現原理:比較簡單,不做敘述。
?穩定性: 穩定
使用場景:適用于n較小的情況。
選擇排序的實現原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
?穩定性:不穩定。比如序列5?8?5?2?9,第一遍選擇第1個元素5會和2交換,那么原序列中2個5的相對前后順序就被破壞了,所以選擇排序不是一個穩定的排序算法。
?使用場景:適用于n較小的情況。運行時間和輸入無關。
插入排序的實現原理:
它的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入
穩定性:穩定
最好情況:本就是有序序列。
使用場景:數據量小時使用。并且大部分已經被排序。
歸并排序的實現原理:將已有序的子序列合并,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合并成一個有序表,稱為2-路歸并。?
? 穩定性:穩定
??使用場景:如果需要穩定,空間不是很重要,就選擇歸并排序。
快速排序的實現原理:通過一趟排序將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可分別對這兩部分記錄繼續進行排序,以達到整個序列有序。
?穩定性:不穩定
?最壞情況:
?使用場景:是最快的通用排序算法,大多數使用情況下,是最佳選擇。
堆排序:
堆排序穩定性
堆排序是不穩定的算法,它不滿足穩定算法的定義。它在交換數據的時候,是比較父結點和子節點之間的數據,所以,即便是存在兩個數值相等的兄弟節點,它們的相對順序在排序也可能發生變化。
計數排序的實現原理:
? 穩定性:穩定
當輸入的元素是 n 個 0到 k 之間的整數時,時間復雜度是O(n+k),空間復雜度也是O(n+k),其排序速度快于任何比較排序算法。當k不是很大并且序列比較集中時,計數排序是一個很有效的排序算法
桶排序: ? ?
實現原理:它利用了函數的映射關系,高效與否的關鍵就在于這個映射函數的確定。桶排序 (Bucket sort)的工作的原理:假設輸入數據服從均勻分布,將數據分到有限數量的桶里,每個桶再分別排序(有可能再使用別的排序算法或是以遞歸方式繼續使用桶排序進行排)。
桶排序最好情況下使用線性時間O(n),桶排序的時間復雜度,取決與對各個桶之間數據進行排序的時間復雜度,因為其它部分的時間復雜度都為O(n)。很顯然,桶劃分的越小,各個桶之間的數據越少,排序所用的時間也會越少。但相應的空間消耗就會增大。
(1)若n較小(如n≤50),可采用直接插入或直接選擇排序。
當記錄規模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少于直接插人,應選直接選擇排序為宜。
(2)若文件初始狀態基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;
(3)若n較大,則應采用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序。
?快速排序是目前基于比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短;堆排序所需的輔助空間少于快速排序,并且不會出現快速排序可能出現的最壞情況。這兩種排序都是不穩定的。若要求排序穩定,則可選用歸并排序。但本章介紹的從單個記錄起進行兩兩歸并的? 排序算法并不值得提倡,通常可以將它和直接插入排序結合在一起使用。先利用直接插入排序求得較長的有序子文件,然后再兩兩歸并之。因為直接插入排序是穩定的,所以改進后的歸并排序仍是穩定的。
?
?有些內容來自于其他人的博客,自己的紙質筆記。
?
?
總結
以上是生活随笔為你收集整理的常见排序算法总结(实现原理,稳定度,使用场景,时间复杂度)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机房环境监控系统品牌-深圳计通
- 下一篇: 常用算法稳定性分析