@@ -28,18 +28,18 @@ import Foundation
28
28
29
29
30
30
public func bucketSort< T: Sortable > ( elements: [ T ] , distributor: Distributor , sorter: Sorter , buckets: [ Bucket < T > ] ) -> [ T ] {
31
- var bucketsCopy = buckets
32
- for elem in elements {
33
- distributor. distribute ( elem, buckets: & bucketsCopy)
34
- }
35
-
36
- var results = [ T] ( )
37
-
38
- for bucket in buckets {
39
- results += bucket. sort ( sorter)
40
- }
41
-
42
- return results
31
+ var bucketsCopy = buckets
32
+ for elem in elements {
33
+ distributor. distribute ( element : elem, buckets: & bucketsCopy)
34
+ }
35
+
36
+ var results = [ T] ( )
37
+
38
+ for bucket in buckets {
39
+ results += bucket. sort ( algorithm : sorter)
40
+ }
41
+
42
+ return results
43
43
}
44
44
45
45
//////////////////////////////////////
@@ -48,7 +48,7 @@ public func bucketSort<T: Sortable>(elements: [T], distributor: Distributor, sor
48
48
49
49
50
50
public protocol Distributor {
51
- func distribute< T: Sortable > ( element: T , inout buckets: [ Bucket < T > ] )
51
+ func distribute< T: Sortable > ( element: T , buckets: inout [ Bucket < T > ] )
52
52
}
53
53
54
54
/*
@@ -67,24 +67,24 @@ public protocol Distributor {
67
67
* By following the formula: element / capacity = #ofBucket
68
68
*/
69
69
public struct RangeDistributor : Distributor {
70
-
71
- public init ( ) { }
72
-
73
- public func distribute< T: Sortable > ( element: T , inout buckets: [ Bucket < T > ] ) {
74
- let value = element. toInt ( )
75
- let bucketCapacity = buckets. first!. capacity
76
-
77
- let bucketIndex = value / bucketCapacity
78
- buckets [ bucketIndex] . add ( element)
79
- }
70
+
71
+ public init ( ) { }
72
+
73
+ public func distribute< T: Sortable > ( element: T , buckets: inout [ Bucket < T > ] ) {
74
+ let value = element. toInt ( )
75
+ let bucketCapacity = buckets. first!. capacity
76
+
77
+ let bucketIndex = value / bucketCapacity
78
+ buckets [ bucketIndex] . add ( item : element)
79
+ }
80
80
}
81
81
82
82
//////////////////////////////////////
83
83
// MARK: Sortable
84
84
//////////////////////////////////////
85
85
86
86
public protocol IntConvertible {
87
- func toInt( ) -> Int
87
+ func toInt( ) -> Int
88
88
}
89
89
90
90
public protocol Sortable : IntConvertible , Comparable {
@@ -95,50 +95,50 @@ public protocol Sortable: IntConvertible, Comparable {
95
95
//////////////////////////////////////
96
96
97
97
public protocol Sorter {
98
- func sort< T: Sortable > ( items: [ T ] ) -> [ T ]
98
+ func sort< T: Sortable > ( items: [ T ] ) -> [ T ]
99
99
}
100
100
101
101
public struct InsertionSorter : Sorter {
102
-
103
- public init ( ) { }
104
-
105
- public func sort< T: Sortable > ( items: [ T ] ) -> [ T ] {
106
- var results = items
107
- for i in 0 ..< results. count {
108
- var j = i
109
- while j > 0 && results [ j- i] > results [ j] {
110
-
111
- let auxiliar = results [ i]
112
- results [ i] = results [ j]
113
- results [ j] = auxiliar
114
-
115
- j -= 1
116
- }
102
+
103
+ public init ( ) { }
104
+
105
+ public func sort< T: Sortable > ( items: [ T ] ) -> [ T ] {
106
+ var results = items
107
+ for i in 0 ..< results. count {
108
+ var j = i
109
+ while j > 0 && results [ j- i] > results [ j] {
110
+
111
+ let auxiliar = results [ i]
112
+ results [ i] = results [ j]
113
+ results [ j] = auxiliar
114
+
115
+ j -= 1
116
+ }
117
+ }
118
+ return results
117
119
}
118
- return results
119
- }
120
120
}
121
121
122
122
//////////////////////////////////////
123
123
// MARK: Bucket
124
124
//////////////////////////////////////
125
125
126
126
public struct Bucket < T: Sortable > {
127
- var elements : [ T ]
128
- let capacity : Int
129
-
130
- public init ( capacity: Int ) {
131
- self . capacity = capacity
132
- elements = [ T] ( )
133
- }
134
-
135
- public mutating func add( item: T ) {
136
- if elements. count < capacity {
137
- elements. append ( item)
127
+ var elements : [ T ]
128
+ let capacity : Int
129
+
130
+ public init ( capacity: Int ) {
131
+ self . capacity = capacity
132
+ elements = [ T] ( )
133
+ }
134
+
135
+ public mutating func add( item: T ) {
136
+ if elements. count < capacity {
137
+ elements. append ( item)
138
+ }
139
+ }
140
+
141
+ public func sort( algorithm: Sorter ) -> [ T ] {
142
+ return algorithm. sort ( items: elements)
138
143
}
139
- }
140
-
141
- public func sort( algorithm: Sorter ) -> [ T ] {
142
- return algorithm. sort ( elements)
143
- }
144
144
}
0 commit comments