Skip to content

Commit 4652ae7

Browse files
committed
Fix heapify stopping before it should
1 parent afe7111 commit 4652ae7

File tree

2 files changed

+47
-29
lines changed

2 files changed

+47
-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: 46 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,48 +15,78 @@ 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([1].partiallySorted(0, by: <), [1])
41+
XCTAssertEqual([1].partiallySorted(0, by: >), [1])
42+
XCTAssertEqual([1].partiallySorted(1, by: <), [1])
43+
XCTAssertEqual([1].partiallySorted(1, by: >), [1])
44+
XCTAssertEqual([0, 1].partiallySorted(1, by: <), [0, 1])
45+
XCTAssertEqual([1, 0].partiallySorted(1, by: <), [0, 1])
46+
XCTAssertEqual([1, 0].partiallySorted(2, by: <), [0, 1])
47+
XCTAssertEqual([0, 1].partiallySorted(1, by: >), [1, 0])
48+
XCTAssertEqual([1, 0].partiallySorted(1, by: >), [1, 0])
49+
XCTAssertEqual([1, 0].partiallySorted(2, by: >), [1, 0])
50+
51+
XCTAssertEqual(
52+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: <),
3453
[1, 2, 3, 4, 7, 90, 70, 20, 100]
3554
)
3655

3756
XCTAssertEqual(
38-
array.partiallySorted(9),
39-
[1, 2, 3, 4, 7, 20, 70, 90, 100]
57+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: >),
58+
[100, 90, 70, 20, 7, 2, 4, 3, 1]
59+
)
60+
61+
XCTAssertEqual(
62+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: >),
63+
[100, 90, 70, 20, 7, 2, 4, 3, 1]
64+
)
65+
66+
XCTAssertEqual(
67+
[1, 2, 3, 4, 7, 20, 70, 90, 100].partiallySorted(5, by: <),
68+
[1, 2, 3, 4, 7, 90, 70, 20, 100]
4069
)
4170
}
4271

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

46-
XCTAssertEqual(array.partiallySorted(0, by: >), array)
75+
XCTAssertEqual(array.partiallySorted(0), array)
76+
4777
XCTAssertEqual(
48-
array.partiallySorted(1, by: >),
49-
[100, 1, 4, 3, 7, 20, 70, 90, 2]
78+
array.partiallySorted(1),
79+
[1, 90, 4, 70, 100, 7, 3, 2, 20]
5080
)
5181

5282
XCTAssertEqual(
53-
array.partiallySorted(5, by: >),
54-
[100, 90, 70, 20, 7, 2, 4, 3, 1]
83+
array.partiallySorted(5),
84+
[1, 2, 3, 4, 7, 90, 70, 20, 100]
5585
)
5686

5787
XCTAssertEqual(
58-
array.partiallySorted(9, by: >),
59-
[100, 90, 70, 20, 7, 4, 3, 2, 1]
88+
array.partiallySorted(9),
89+
[1, 2, 3, 4, 7, 20, 70, 90, 100]
6090
)
6191
}
6292

@@ -91,16 +121,4 @@ final class PartialSortTests: XCTestCase {
91121
[1, 2, 3, 4, 7, 20, 70, 90, 100]
92122
)
93123
}
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-
}
106124
}

0 commit comments

Comments
 (0)