cubegao

Swift.快速排序

2015-05-22

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import Foundation

class QuickSortSolution {
func sort(_ n: [Int]) -> [Int] {
var s = n
quickSort(&s, 0, n.count - 1)
return s

}

func quickSort(_ n: inout [Int],_ left: Int,_ right: Int) {
if left < right {
let mid = partition(&n, left, right)
quickSort(&n, left, mid - 1)
quickSort(&n, mid + 1, right)
}
}

func partition(_ n: inout [Int],_ left1: Int,_ right1: Int) -> Int {
let temp = n[left1]
var left = left1
var right = right1


while left < right {
while left < right && n[right] >= temp {
right -= 1
}
n[left] = n[right]

while left < right && n[left] <= temp{
left += 1
}
n[right] = n[left]
}

n[left] = temp

return left
}
}

算法思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

github地址:https://github.com/cubegao/LeetCode

Tags: 算法

扫描二维码,分享此文章