Skip to content

Commit 4456d2e

Browse files
committed
Implemented Radix sort
1 parent 9abe959 commit 4456d2e

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//: [Previous](@previous)
2+
3+
import Foundation
4+
5+
// MARK: - Radix sort relies on the positional notation of integers and sorts an integer array for linear time.
6+
extension Array where Element == Int {
7+
8+
public mutating func radixSort(of base: Int = 10) {
9+
var isDone = false
10+
var digits = 1
11+
12+
while !isDone {
13+
isDone = true
14+
var buckets: [[Int]] = .init(repeating: [], count: base)
15+
16+
forEach { number in
17+
let remainig = number / digits
18+
let digit = remainig % base
19+
buckets[digit].append(number)
20+
21+
if remainig > 0 {
22+
isDone = false
23+
}
24+
}
25+
digits *= base
26+
self = buckets.flatMap { $0 }
27+
}
28+
}
29+
}
30+
31+
32+
//: Usage:
33+
34+
var numbers = [88, 410, 1, 1772, 20, 6, 4, 45688]
35+
numbers.radixSort()
36+
37+
//: [Next](@next)

Sort.playground/contents.xcplayground

+1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@
77
<page name='Quick-Lomuto-Scheme'/>
88
<page name='Bubble'/>
99
<page name='Shell'/>
10+
<page name='Radix'/>
1011
</pages>
1112
</playground>

0 commit comments

Comments
 (0)