Skip to content

Commit 64545b8

Browse files
committed
Fix heapify stopping before it should
1 parent afe7111 commit 64545b8

File tree

2 files changed

+43
-29
lines changed

2 files changed

+43
-29
lines changed

Sources/Algorithms/PartialSort.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ extension MutableCollection where Self: RandomAccessCollection {
174174
return
175175
}
176176
var heapEndIndex = 0
177-
for i in ((count / 2) + 1)..<count {
177+
for i in (count / 2)..<count {
178178
try siftDown(i, by: areInIncreasingOrder, heapEndIndex: heapEndIndex)
179179
}
180180
var iterator = (0..<k).makeIterator()

Tests/SwiftAlgorithmsTests/PartialSortTests.swift

Lines changed: 42 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,48 +15,74 @@ import Algorithms
1515
final class PartialSortTests: XCTestCase {
1616
func testEmpty() {
1717
let array = [Int]()
18-
1918
XCTAssertEqual(array.partiallySorted(0), [])
2019
}
2120

22-
func testPartialSortComparable() {
21+
func testPartialSortWithPriority() {
2322
let array: [Int] = [20, 1, 4, 70, 100, 2, 3, 7, 90]
2423

25-
XCTAssertEqual(array.partiallySorted(0), array)
24+
XCTAssertEqual(array.partiallySorted(0, by: >), array)
25+
XCTAssertEqual(
26+
array.partiallySorted(1, by: >),
27+
[100, 1, 4, 3, 7, 20, 70, 90, 2]
28+
)
2629

2730
XCTAssertEqual(
28-
array.partiallySorted(1),
29-
[1, 90, 4, 70, 100, 7, 3, 2, 20]
31+
array.partiallySorted(5, by: >),
32+
[100, 90, 70, 20, 7, 2, 4, 3, 1]
3033
)
3134

3235
XCTAssertEqual(
33-
array.partiallySorted(5),
36+
array.partiallySorted(9, by: >),
37+
[100, 90, 70, 20, 7, 4, 3, 2, 1]
38+
)
39+
40+
XCTAssertEqual([0, 1].partiallySorted(1, by: <), [0, 1])
41+
XCTAssertEqual([1, 0].partiallySorted(1, by: <), [0, 1])
42+
XCTAssertEqual([1, 0].partiallySorted(2, by: <), [0, 1])
43+
XCTAssertEqual([0, 1].partiallySorted(1, by: >), [1, 0])
44+
XCTAssertEqual([1, 0].partiallySorted(1, by: >), [1, 0])
45+
XCTAssertEqual([1, 0].partiallySorted(2, by: >), [1, 0])
46+
47+
XCTAssertEqual(
48+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: <),
3449
[1, 2, 3, 4, 7, 90, 70, 20, 100]
3550
)
3651

3752
XCTAssertEqual(
38-
array.partiallySorted(9),
39-
[1, 2, 3, 4, 7, 20, 70, 90, 100]
53+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: >),
54+
[100, 90, 70, 20, 7, 2, 4, 3, 1]
55+
)
56+
57+
XCTAssertEqual(
58+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: >),
59+
[100, 90, 70, 20, 7, 2, 4, 3, 1]
60+
)
61+
62+
XCTAssertEqual(
63+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: <),
64+
[1, 2, 3, 4, 7, 90, 70, 20, 100]
4065
)
4166
}
4267

43-
func testPartialSortComparableWithCustomPriority() {
68+
func testPartialSortComparable() {
4469
let array: [Int] = [20, 1, 4, 70, 100, 2, 3, 7, 90]
4570

46-
XCTAssertEqual(array.partiallySorted(0, by: >), array)
71+
XCTAssertEqual(array.partiallySorted(0), array)
72+
4773
XCTAssertEqual(
48-
array.partiallySorted(1, by: >),
49-
[100, 1, 4, 3, 7, 20, 70, 90, 2]
74+
array.partiallySorted(1),
75+
[1, 90, 4, 70, 100, 7, 3, 2, 20]
5076
)
5177

5278
XCTAssertEqual(
53-
array.partiallySorted(5, by: >),
54-
[100, 90, 70, 20, 7, 2, 4, 3, 1]
79+
array.partiallySorted(5),
80+
[1, 2, 3, 4, 7, 90, 70, 20, 100]
5581
)
5682

5783
XCTAssertEqual(
58-
array.partiallySorted(9, by: >),
59-
[100, 90, 70, 20, 7, 4, 3, 2, 1]
84+
array.partiallySorted(9),
85+
[1, 2, 3, 4, 7, 20, 70, 90, 100]
6086
)
6187
}
6288

@@ -91,16 +117,4 @@ final class PartialSortTests: XCTestCase {
91117
[1, 2, 3, 4, 7, 20, 70, 90, 100]
92118
)
93119
}
94-
95-
func testPartialSortDescendingArray() {
96-
let array: [Int] = [100, 90, 70, 20, 7, 4, 3, 2, 1]
97-
98-
XCTAssertEqual(array.partiallySorted(9, by: >), array)
99-
}
100-
101-
func testPartialSortAscendingArray() {
102-
let array: [Int] = [1, 2, 3, 4, 7, 20, 70, 90, 100]
103-
104-
XCTAssertEqual(array.partiallySorted(9, by: <), array)
105-
}
106120
}

0 commit comments

Comments
 (0)