排序有內部排序和外部排序,內部排序是數據記錄在內存中進行排序,而外部排序是因排序的數據很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。
圖示
不穩定的排序算法:
簡單選擇排序、快速排序、希爾排序、堆排序
穩定的排序算法
冒泡排序、直接插入排序、歸并排序、基數排序
時間復雜度
冒泡排序:O(n^2)
簡單選擇排序:O(n^2)
直接插入排序:O(n^2)
快速排序是不穩定的。最理想情況算法時間復雜度O(nlogn),最壞O(n^2)。
堆排序:O(nlogn)
歸并排序:是O(nlogn)
希爾排序:O(n^1.25)
基數排序:O(d(rd+n))
各排序算法的簡單描述
- 冒泡排序:從無序區通過交換找出最大元素放到有序區前端。
- 簡單選擇排序:在無序區里找一個最小的元素跟在有序區的后面。對數組:比較得多,換得少。
- 直接插入排序:把無序區的第一個元素插入到有序區的合適的位置。對數組:比較得少,換得多。
- 堆排序:從堆頂把根卸出來放在有序區之前,再恢復堆。
- 歸并排序:把數據分為兩段,從兩段中逐個選最小的元素移入新數據段的末尾。可從上到下或從下到上進行。
- 快速排序:在區間中隨機挑選一個元素作基準,將小于基準的元素放在基準之前,大于基準的元素放在基準之后,再分別對小數區與大數區進行排序。
- 桶排序:將值為i的元素放入i號桶,最后依次把桶里的元素倒出來。
- 基數排序:一種多關鍵字的排序算法,可用桶排序實現。