氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢「浮」到數列的頂端。
1.1 演算法描述
比較相鄰的元素。如果第乙個比第二個大,就交換它們兩個;
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對,這樣在最後的元素應該會是最大的數;
針對所有的元素重複以上的步驟,除了最後乙個;
1.2 演算法分析
最佳情況:t(n) = o(n) 最差情況:t(n) = o(n2) 平均情況:t(n) = o(n2)
1.3 **實現
用乙個布林值減少不必要的迴圈:var issort = true
//swift**
func
bubblesort
( list:
[int])
->
[int]}
if issort
}return mylist
}
選擇排序是最穩定的排序之一,因為無論什麼資料時間複雜度都是o(n2)
唯一的好處就是不占用額外的記憶體空間。
2.1 演算法描述
選擇排序(selection-sort)是一種簡單直觀的排序演算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
2.2 **實現
//swift
public
func
selectionsort
(alist:
[int])
->
[int]}
let temp = list[minindex]
list[minindex]
= list[i]
list[i]
= temp
}return list
}
插入排序(insertion-sort)的演算法描述是一種簡單直觀的排序演算法。它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,通常採用in-place排序(即只需用到o(1)的額外空間的排序),因而在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間
3.1 演算法描述
從第乙個元素開始,該元素可以認為已經被排序;
取出下乙個元素,在已經排序的元素序列中從後向前掃瞄;
如果該元素(已排序)大於新元素,將該元素移到下一位置;
重複步驟3,直到找到已排序的元素小於或者等於新元素的位置;
將新元素插入到該位置後;
重複步驟2~5。
3.2 **實現
//swift
public
func
insertionsort
(alist:
[int])
->
[int
] j = j -1if
!isneedsort }}
return list
}
快速排序 - (類似於選擇排序的定位思想)選一基準元素,依次將剩餘元素中小於該基準元素的值放置其左側,大於等於該基準元素的值放置其右側;然後,取基準元素的前半部分和後半部分分別進行同樣的處理;以此類推,直至各子串行剩餘乙個元素時,即排序完成(模擬二叉樹的思想,from up to down)
時間複雜度:o(nlogn)
func
quicksort
(a:inout
[int
], low:
int, high:
int)
var i = low
var j = high
let key = a[i]
while i < j
// 只要出現乙個比key小的數,將這個數放入左邊i的位置
a[i]
= a[j]
// 從左邊開始比較,比key小的數字置不變
while i < j && a[i]
<= key
// 只要出現乙個比key大的數,將這個數放入右邊j的位置
a[j]
= a[i]
} a[i]
= key // 將key放入i的位置,則左側數都比key小,右側數都比key大
quicksort
(a:&a, low: low, high: i -1)
// 左遞迴
quicksort
(a:&a, low: i +
1, high: high)
// 右遞迴
}
經典排序演算法(一) 氣泡排序
氣泡排序是最基礎的一種排序方法,在我們剛接觸程式語言的迴圈時,常常會接觸到這種演算法,利用的是氣泡越冒越大的原理。它的時間複雜度為o n 2 具體原理如下 假設現在有一行待排序的數 1,5,2,6,3 利用氣泡排序演算法時,程式是這樣執行的。1 第一組排序 找出最大的數並放至隊尾 程式會拿出這一行數...
經典演算法(一) 氣泡排序
校園招聘馬上就要來臨了,作為過來人,演算法在筆試中必考,因為畢竟是學生,大部分沒有專案經驗,只能問一些基礎的知識!今天帶大家學習演算法中的經典 氣泡排序,也是去年我參加筆試考的最多的演算法之一。一 演算法描述 氣泡排序 依次比較相鄰的資料,將小資料放在前,大資料放在後 即第一趟先比較第1個和第2個數...
經典排序 氣泡排序
氣泡排序思想介紹 核心思想 相鄰兩個數之間比較,把大的數往右換,最終每經過一次內層迴圈,就把當前未排序的陣列的最大值換到最右邊去了 如果是從大到小排序,就把小的數往右換,換到最後那個數就是最小的 時間複雜度 氣泡排序的時間複雜度為o n 2 很好理解,內外層迴圈 下面貼上 void bubble s...