快速排序:給基準資料找其正確索引位置的過程. 快排的時間複雜度是o(nlogn)
,空間複雜度是o(logn)
1、給乙個基準資料,一般是陣列第0個,即target = array[0]
2、從後半部分開始,如果掃瞄到的值大於基準資料就讓high減1,如果發現有元素比該基準資料的值小,就將high位置的值賦值給low位置
3、從前往後掃瞄,如果掃瞄到的值小於基準資料就讓low加1,如果發現有元素大於基準資料的值,就再將low位置的值賦值給high位置的值
4、直到low=high結束迴圈,此時low或high的下標就是基準資料target在該陣列中的正確索引位置
func quicksort(_ array: inout array, _ low: int, _ hight: int) -> void
// 找尋基準資料的正確索引
let index = getcurrentindex(&array, low, hight)
quicksort(&array, low, index-1)
quicksort(&array, index+1, hight)
}func getcurrentindex(_ array: inout array, _ low: int, _ hight: int) -> int
// 如果隊尾元素小於tmp了,需要將其賦值給low
array[low] = array[hight]
while low < hight && array[low] <= target
// 當隊首元素大於tmp時,需要將其賦值給high
array[hight] = array[low];
}//替換陣列原數
array[low] = target
return low
}override func viewdidload()
測試結果:
排序後陣列:[-1, 0, 1, 2, 5, 8, 22, 22, 23, 38, 49, 65, 76, 97]
使用swift filter函式實現更簡單:
func quicksort(_ data: [t]) -> [t]
let pivot = data[data.count/2]
let less = data.filter
let equel = data.filter
let greater = data.filter
return quicksort(less) + equel + quicksort(greater)
}//呼叫測試
var data = [1,55,3,11,2,77,34,6,32]
print(data.sorted())
print(quicksort(data))
排序結果:
[1, 2, 3, 6, 11, 32, 34, 55, 77]
經典排序演算法之快速排序
快排的思想是遞迴。一趟下來,比基數小的都在基數的左邊,比基數大的都在基數的右邊,然後分別對基數左邊的數進行遞迴,對右邊的數進行遞迴 當需要遞迴的元素只有乙個時,結束遞迴。public class quicksort quicksort arr,0,arr.length 1 for int a arr...
經典排序演算法之快速排序
快速排序就是通過一趟排序將原資料分成兩部分,其中一部分關鍵字都比另一部分小,接下來再對這兩部分分別使用快速排序,這裡有遞迴的思想。快速排序的平均時間複雜度為o nlgn 所以適合資料量較大的情況,但快排需要頻繁的對資料位置的操作,故不適合鏈式儲存資料。function sortquick arr,s...
經典演算法之快速排序
說明 快速排序是目前公認最快的排序方法之一。大部分情況都表現得很好,但當必須考慮最壞情況時,快速排序不可接受,因為時間達到o n2 思路 快速排序的基本思想是在數列中找出適當的軸心,將數列分成左右兩部分 左半部分的元素都小於右半部分的元素 然後分別對兩部分進行排序 重複選擇軸心,劃分左右部分的過程 ...