排序學習 - 為了面對演算法面試(1)
前言
不懂就要問不會就要查!排序程式碼我選擇用Swift演示(暫時覺得Swift真不適合寫排序?)
放在前面的基礎理論知識
- 穩定排序與不穩定排序:通俗地講就是能保證排序前2個相等的數其在序列的前後位置順序和排序後它們兩個的前後位置順序相同。在簡單形式化一下,如果Ai = Aj,Ai原來在位置前,排序後Ai還是要在Aj位置前。
- 時間複雜度
- 空間複雜度
- 內排序和外排序:字數不多,點選去看
先從簡單的開始:
- 1.選擇排序:
方法原理:
- 對比陣列中前一個元素跟後一個元素的大小,如果後面的元素比前面的元素小則用一個變數k來記住他的位置,接著第二次比較,前面“後一個元素”現變成了“前一個元素”,繼續跟他的“後一個元素”進行比較如果後面的元素比他要小則用變數k記住它在陣列中的位置(下標),等到迴圈結束的時候,我們應該找到了最小的那個數的下標了,然後進行判斷,如果這個元素的下標不是第一個元素的下標,就讓第一個元素跟他交換一下值,這樣就找到整個陣列中最小的數了。然後找到陣列中第二小的數,讓他跟陣列中第二個元素交換一下值,以此類推。
程式碼實現:
//選擇排序:
func selectionSort(arr:inout [Int]) -> [Int]{
for i in 0..<arr.count-1{
for j in i+1..<arr.count{
if arr[i] > arr[j] {
let temp = arr[j]
arr[j] = arr[i]
arr[i] = temp
}
}
}
return arr
}
-
2.氣泡排序:
方法原理:
- 氣泡排序演算法的運作如下:(從後往前)
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3.針對所有的元素重複以上的步驟,除了最後一個。
4.持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
- 氣泡排序演算法的運作如下:(從後往前)
程式碼實現:
//氣泡排序
func bubbleSort(arr:inout [Int]) -> [Int]{
for i in 0..<arr.count-1{
for j in 0..<arr.count-1-i{
if arr[j] > arr[j+1] {
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
}
return arr
}
- 3插入排序:
方法原理:
- 每次處理就是將無序數列的第一個元素與有序數列的元素從後往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中。
假設在一個無序的陣列中,要將該陣列中的數按插入排序的方法從小到大排序。假設啊a[]={3,5,2,1,4};插入排序的思想就是比大小,滿足條件交換位置,一開始會像氣泡排序一樣,但會比冒泡多一步就是交換後(a[i]=a[i+1]後)原位置(a[i])會繼續和前面的數比較滿足條件交換,直到a[i+1]前面的陣列是有序的。比如在第二次比較後陣列變成a[]={2,3,5,1,4};
- 每次處理就是將無序數列的第一個元素與有序數列的元素從後往前逐個進行比較,找出插入位置,將該元素插入到有序數列的合適位置中。
//插入排序
func insertionSorting(arr:inout [Int]) -> [Int]{
for i in 1..<arr.count {
var j = i-1
while(j >= 0){
if arr[j] > arr[j+1] {
let temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}else{
//如果 j 這個元素比 j+1的小 那麼前面不用比了 都比 j+1的小
break
}
j -= 1
}
}
return arr
}
to be continue!
相關文章
- 排序演算法你學會了嗎?排序演算法
- 演算法學習 – 歸併排序演算法排序
- 演算法學習 - 歸併排序演算法排序
- 演算法學習之路|快速排序演算法排序
- 演算法學習-遞迴排序演算法遞迴排序
- IOS中學習排序演算法iOS排序演算法
- 演算法學習 - 基礎排序演算法演算法排序
- 演算法學習之選擇排序和堆排序:演算法排序
- PHP常見排序演算法學習PHP排序演算法
- 演算法學習之簡單排序演算法排序
- 【一起學習排序演算法】3 選擇排序排序演算法
- 【一起學習排序演算法】2 氣泡排序排序演算法
- 【一起學習排序演算法】4 插入排序排序演算法
- 面試時寫不出排序演算法?看這篇就夠了。面試排序演算法
- 面試時寫不出排序演算法?看這篇就夠了面試排序演算法
- golang sort.Sort () 排序演算法學習Golang排序演算法
- 排序演算法對比排序演算法
- 【一起學習排序演算法】0 序言排序演算法
- 演算法導論學習之五:快速排序演算法排序
- python學習演算法(1)Python演算法
- 演算法中級學習1演算法
- #排序演算法#【1】概述、氣泡排序、選擇排序排序演算法
- 頁面置換演算法你學會了嗎?演算法
- 求職者應該學會面對不同的面試官求職面試
- 演算法導論學習之六:歸併排序演算法排序
- 學習排序演算法(二):Pairwise方法之RankNet排序演算法AI
- 演算法導論學習之二:插入排序演算法排序
- 演算法導論學習之一:氣泡排序演算法排序
- 演算法學習?挑戰高薪的必經之路!讓面試官滿意的排序演算法(圖文解析)演算法高薪面試排序
- 演算法學習筆記(1)- 演算法概述演算法筆記
- 演算法基礎提升學習1演算法
- 【演算法】6 比較排序之外學習新的線性時間排序演算法排序
- 面試中的排序演算法總結面試排序演算法
- 給90後發了面試邀請,可他卻因為“薪酬面議”拒絕了面試
- 《iOS面試之道》演算法基礎學習(上)iOS面試演算法
- 《iOS面試之道》演算法基礎學習(下)iOS面試演算法
- 演算法學習之直接插入排序(java)演算法排序Java
- 看動畫學演算法之:排序-count排序動畫演算法排序