Skip to content

Commit e8504fd

Browse files
committed
Optimize
1 parent c68537f commit e8504fd

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-4
lines changed

Sources/Algorithms/PartialSort.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,12 @@ extension Collection {
5050

5151
var result = try self.prefix(count).sorted(by: areInIncreasingOrder)
5252
for e in self.dropFirst(count) {
53-
if let last = result.last, try areInIncreasingOrder(last, e) { continue }
54-
if let insertionIndex = try result.firstIndex(where: { try areInIncreasingOrder(e, $0) }) {
55-
result.insert(e, at: insertionIndex)
56-
result.removeLast()
53+
if let last = result.last, try areInIncreasingOrder(last, e) {
54+
continue
5755
}
56+
let insertionIndex = try result.partitioningIndex { try areInIncreasingOrder(e, $0) }
57+
result.removeLast()
58+
result.insert(e, at: insertionIndex)
5859
}
5960

6061
return result

Tests/SwiftAlgorithmsTests/PartialSortTests.swift

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,31 @@ final class PartialSortTests: XCTestCase {
6767
[1, 2, 3, 4, 7, 20, 70, 90, 100].sortedPrefix(5, by: <),
6868
[1, 2, 3, 4, 7]
6969
)
70+
71+
XCTAssertEqual(
72+
[4, 5, 6, 1, 2, 3].sortedPrefix(3, by: <),
73+
[1, 2, 3]
74+
)
75+
76+
XCTAssertEqual(
77+
[4, 5, 9, 8, 7, 6].sortedPrefix(3, by: <),
78+
[4, 5, 6]
79+
)
80+
81+
XCTAssertEqual(
82+
[4, 3, 2, 1].sortedPrefix(1, by: <),
83+
[1]
84+
)
85+
86+
XCTAssertEqual(
87+
[4, 2, 1, 3].sortedPrefix(3, by: >),
88+
[4, 3, 2]
89+
)
90+
91+
XCTAssertEqual(
92+
[4, 2, 1, 3].sortedPrefix(3, by: <),
93+
[1, 2, 3]
94+
)
7095
}
7196

7297
func testSortedPrefixComparable() {

0 commit comments

Comments
 (0)