根據(jù)時間復雜度進行了區(qū)分:
分析排序算法
從以下幾個方面進行入手分析坑鱼。
排序算法的執(zhí)行效率
- 最好情況,最壞情況常柄,平均情況時間復雜度。
- 時間復雜度的系數(shù)飘痛,常數(shù),低階
數(shù)據(jù)量小的時候于毙,這些參數(shù)具有可參考性敦冬。 - 比較次數(shù)和交換次數(shù)
排序算法的內(nèi)存損耗
原地排序算法:空間復雜度是O(1)的排序算法。
排序算法的穩(wěn)定性
待排序的序列中存在等值的元素唯沮,經(jīng)過排序后想等元素之間原有的先后順序不變脖旱。
冒泡排序
冒泡排序:只會操作相鄰的兩個數(shù)據(jù),每次冒泡操作都會對相鄰的元素進行比較介蛉;不滿足條件就進行交換萌庆;一次冒泡操作會把一個元素放到應該到的位置。
重復n次就完成了n個數(shù)據(jù)的排序工作币旧。
實現(xiàn)冒泡排序的算法
冒泡排序是原地排序嗎践险?
答案是。每次交換數(shù)據(jù)需要的常量級的空間吹菱,時間復雜度是O(1)
穩(wěn)定的排序算法
只改變大小有差異的兩者數(shù)據(jù)巍虫,相等的不需要操作。故事穩(wěn)定的排序算法
時間復雜度
- 最好的情況是O(N)
- 最壞的情況是O(N*N).因為每個值都需要移動,N個值移動鳍刷,一個值需要移動N次
- 平均時間復雜度
采用有序度與逆序度來分析平均時間復雜度
有序度:具有有序關系的元素對的個數(shù)
有序度
滿序對:n(n-1)/2
逆序對:與有序對概念反過來占遥。
滿序對=有序對+逆序對。
平均情況下需要n(n-1)/4的情況下操作输瓜。比較操作比交換操作多瓦胎,復雜的時間復雜度是O(NN).平均情況下也是O(NN)
插入排序
動態(tài)的插入數(shù)據(jù),保持集合中的數(shù)據(jù)有序尤揣。
數(shù)據(jù)分為兩組搔啊,已排序區(qū)間與為排序區(qū)間。
核心思想:取未排序區(qū)間中的元素北戏,在已排序區(qū)間中找到合適的位置將其插入负芋。直到未排序的元素為空,算法結束嗜愈。
兩種操作:比較與移動示罗。插入之后需要把后面的元素后移一個位置,騰出地方給新元素插入。
移動的次數(shù)是固定的芝硬,就是逆序度蚜点。
代碼實現(xiàn)等待
原地排序
符合“枰酰空間復雜度是O(1),運行期間不需要額外的元素
穩(wěn)定的排序
數(shù)據(jù)相等的绍绘,數(shù)據(jù)不會做遷移。穩(wěn)定的排序算法。
時間復雜度陪拘。
最好是O(N)
最壞是O( N^2 )
平均是O(N^2)
選擇排序
區(qū)分已排區(qū)間與未排區(qū)間厂镇,每次排序會把從未排序區(qū)間找到的最小元素放到已排序件的末尾。
代碼實現(xiàn)周六日
原地排序
空間復雜度是O(1),屬于原地排序左刽。
穩(wěn)定排序
不屬于穩(wěn)定的排序
時間復雜度
最好是O(N)
最壞是O( N^2 )
平均是O(N^2)
選擇插入比冒泡好
在于冒泡需要在交換的時候進行三次操作捺信。插入排序進行一次操作即可,隨著數(shù)據(jù)量的增加3N的時間會遠遠大于N的時間量