《資料結構與演算法》之鍊錶
《資料結構與演算法》之鏈棧
《資料結構與演算法》之佇列
《資料結構與演算法》之二分查詢
《資料結構與演算法》之二叉樹
如果你是一名程式設計師,或多或少你都了解過、聽說過排序。在專案中我們也會經常用到排序,排序非常重要,現在我在這裡分享一些經典的排序演算法。
先附上demo位址
/// 氣泡排序
/// - parameter array: 陣列
class func bubblesort
(array: inout array)}
if end
}}
時間複雜度分析
最好情況下,要排序的資料已經是有序的了,我們只需要進行一次冒泡操作,就可以結束了,所以最好情況時間複雜度是 o(n)。而最壞的情況是,要排序的資料剛好是倒序排列的,我們需要進行 n 次冒泡操作,所以最壞情況時間複雜度為 o(n
2n^2
n2)。平均時間複雜度也是 o(n
2n^2
n2)。
/// 插入排序
/// - parameter array: 陣列
class func insertionsort
(array: inout array
)else
j -=1
}//把基準值插入合適的位置
array[j+1]
= value;
}}
時間複雜度分析
如果要排序的資料已經是有序的,我們並不需要搬移任何資料。所以這種情況下,最好時間複雜度為 o(n)。如果陣列是倒序的,每次插入都相當於在陣列的第乙個位置插入新的資料,所以需要移動大量的資料,所以最壞情況時間複雜度為 o(n
2n^2
n2)。平均時間複雜度也是 o(n
2n^2
n2)。
/// 歸併排序
/// - parameters:
/// - array: 陣列
/// - startidx: 開始座標
/// - endidx: 結束座標
class func mergesort
(array: inout array
, startidx: int, endidx: int)
let mididx =
(startidx + endidx)/2
self
.mergesort
(array:
&array, startidx: startidx, endidx: mididx)
self
.mergesort
(array:
&array, startidx: mididx +
1, endidx: endidx)
self
.merge
(array:
&array, startidx: startidx, mididx: mididx, endidx: endidx)
}/// 陣列排序
class func merge
(array: inout array
, startidx: int, mididx: int, endidx: int)
else
}while i <= mididx
while j <= endidx
// 將排序後的元素,全部都整合到陣列array中
for(idx, value)
in temparray.
enumerated()
}
歸併排序時間複雜度為o(nlogn),歸併排序不是原地排序演算法,需要借助額外的儲存空間。空間複雜度為o(n)。
/// 快排
/// - parameters:
/// - array: 陣列
/// - leftidx: 左下標
/// - rightidx: 右下標
class func quicksore
(array: inout array
, leftidx: int, rightidx: int)
var i = leftidx
var j = rightidx
//記錄比較基準數
let value = array[leftidx]
while i < j
//將查詢到的小值調換到i的位置
array[i]
= array[j]
//當在右邊查詢到乙個比基準數小的值時,就從i開始往後找比基準數大的值
while i < j && array[i]
<= value
//將查詢到的大值調換到j的位置
array[j]
= array[i]
}//將基準數放到正確位置
array[i]
= value
/**** 遞迴排序 ***/
//排序基準數左邊的
self
.quicksore
(array:
&array, leftidx: leftidx, rightidx: i -1)
//排序基準數右邊的
self
.quicksore
(array:
&array, leftidx: i +
1, rightidx: rightidx)
}
大部分情況下的時間複雜度都可以做到 o(nlogn),只有在極端情況下,才會退化到 o(n
2n^2
n2)。
資料結構與演算法之排序
三 演算法效能 二 七種排序演算法 資料結構之線性表 資料結構之鍊錶 資料結構之串 資料結構之圖 資料結構之排序演算法 對n個資料執行某種操作,使其按照某種規則有序的排列,這樣的操作就是排序。內排序與外排序 按照排序過程中資料是否全放在記憶體中,可以分為內排序和外排序 交插選並 其中內排序又分為插入...
資料結構與演算法之排序演算法 氣泡排序
2016年10月18日15 34 24 by piaxiaohui 氣泡排序 是一種交換排序,它的基本思想是 兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。氣泡排序的由來,就有些類似於水中的bubble,比較輕的bubble始終在水的底層,而較輕的bubble在水的上層 較輕的b...
資料結構與演算法 排序演算法之氣泡排序
氣泡排序 bubble sort 是一種電腦科學領域的較簡單的排序演算法。它重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序 如從大到小 首字母從z到a 錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。這個演算法的名字由來是因為越小...