
- 資料結構與演算法
- DSA - 首頁
- DSA - 概述
- DSA - 環境搭建
- DSA - 演算法基礎
- DSA - 漸進分析
- 資料結構
- DSA - 資料結構基礎
- DSA - 資料結構和型別
- DSA - 陣列資料結構
- 連結串列
- DSA - 連結串列資料結構
- DSA - 雙向連結串列資料結構
- DSA - 迴圈連結串列資料結構
- 棧與佇列
- DSA - 棧資料結構
- DSA - 表示式解析
- DSA - 佇列資料結構
- 搜尋演算法
- DSA - 搜尋演算法
- DSA - 線性搜尋演算法
- DSA - 二分搜尋演算法
- DSA - 插值搜尋
- DSA - 跳躍搜尋演算法
- DSA - 指數搜尋
- DSA - 斐波那契搜尋
- DSA - 子列表搜尋
- DSA - 雜湊表
- 排序演算法
- DSA - 排序演算法
- DSA - 氣泡排序演算法
- DSA - 插入排序演算法
- DSA - 選擇排序演算法
- DSA - 歸併排序演算法
- DSA - 希爾排序演算法
- DSA - 堆排序
- DSA - 桶排序演算法
- DSA - 計數排序演算法
- DSA - 基數排序演算法
- DSA - 快速排序演算法
- 圖資料結構
- DSA - 圖資料結構
- DSA - 深度優先遍歷
- DSA - 廣度優先遍歷
- DSA - 生成樹
- 樹資料結構
- DSA - 樹資料結構
- DSA - 樹的遍歷
- DSA - 二叉搜尋樹
- DSA - AVL 樹
- DSA - 紅黑樹
- DSA - B 樹
- DSA - B+ 樹
- DSA - 伸展樹
- DSA - 字典樹
- DSA - 堆資料結構
- 遞迴
- DSA - 遞迴演算法
- DSA - 使用遞迴實現漢諾塔
- DSA - 使用遞迴實現斐波那契數列
- 分治法
- DSA - 分治法
- DSA - 最大最小問題
- DSA - Strassen 矩陣乘法
- DSA - Karatsuba 演算法
- 貪心演算法
- DSA - 貪心演算法
- DSA - 旅行商問題(貪心演算法)
- DSA - Prim 最小生成樹
- DSA - Kruskal 最小生成樹
- DSA - Dijkstra 最短路徑演算法
- DSA - 地圖著色演算法
- DSA - 分數揹包問題
- DSA - 帶截止日期的作業排序
- DSA - 最優合併模式演算法
- 動態規劃
- DSA - 動態規劃
- DSA - 矩陣鏈乘法
- DSA - Floyd-Warshall 演算法
- DSA - 0-1 揹包問題
- DSA - 最長公共子序列演算法
- DSA - 旅行商問題(動態規劃)
- 近似演算法
- DSA - 近似演算法
- DSA - 頂點覆蓋演算法
- DSA - 集合覆蓋問題
- DSA - 旅行商問題(近似演算法)
- 隨機化演算法
- DSA - 隨機化演算法
- DSA - 隨機化快速排序演算法
- DSA - Karger 最小割演算法
- DSA - Fisher-Yates 洗牌演算法
- DSA 有用資源
- DSA - 問答
- DSA - 快速指南
- DSA - 有用資源
- DSA - 討論
資料結構 - 排序技術
排序是指以特定格式排列資料。排序演算法指定以特定順序排列資料的方式。最常見的順序是數值順序或字典順序。
排序的重要性在於,如果資料以排序的方式儲存,則可以將資料搜尋最佳化到非常高的水平。排序還用於以更易讀的格式表示資料。以下是現實生活中排序的一些示例:
電話簿 - 電話簿按人名儲存電話號碼,以便可以輕鬆搜尋姓名。
字典 - 字典按字母順序儲存單詞,以便於搜尋任何單詞。
原地排序和非原地排序
排序演算法可能需要一些額外的空間來比較和臨時儲存少量資料元素。這些演算法不需要任何額外的空間,並且據說排序是在原地發生的,或者例如,在陣列本身內。這稱為原地排序。氣泡排序是原地排序的一個例子。
但是,在某些排序演算法中,程式需要大於或等於被排序元素的空間。使用等於或更多空間的排序稱為非原地排序。歸併排序是非原地排序的一個例子。
穩定排序和非穩定排序
如果排序演算法在排序內容後不更改其出現順序的相似內容,則稱為穩定排序。

如果排序演算法在排序內容後更改其出現順序的相似內容,則稱為不穩定排序。

當我們希望維護原始元素的順序(例如元組)時,演算法的穩定性很重要。
自適應排序演算法和非自適應排序演算法
如果排序演算法利用要排序的列表中已經“排序”的元素,則稱該排序演算法為自適應的。也就是說,在排序時,如果源列表中有一些元素已經排序,則自適應演算法將考慮這一點,並會嘗試不重新排序它們。
非自適應演算法是不考慮已經排序的元素的演算法。它們試圖強制重新排序每個元素以確認其排序性。
重要術語
在討論排序技術時,通常會創造一些術語,以下是它們的簡要介紹:
升序
如果後續元素大於前一個元素,則稱一系列值處於升序。例如,1、3、4、6、8、9 按升序排列,因為每個後續元素都大於前一個元素。
降序
如果後續元素小於當前元素,則稱一系列值處於降序。例如,9、8、6、4、3、1 按降序排列,因為每個後續元素都小於前一個元素。
非遞增序
如果後續元素小於或等於序列中其前一個元素,則稱一系列值處於非遞增序。當序列包含重複值時,會出現此順序。例如,9、8、6、3、3、1 按非遞增序排列,因為每個後續元素都小於或等於(對於 3)但不大於任何前一個元素。
非遞減序
如果後續元素大於或等於序列中其前一個元素,則稱一系列值處於非遞減序。當序列包含重複值時,會出現此順序。例如,1、3、3、6、8、9 按非遞減序排列,因為每個後續元素都大於或等於(對於 3)但不小於前一個元素。
有幾種可用的排序技術來對各種資料結構的內容進行排序。以下是一些: