Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Updated OrderedArray to Swift 3
  • Loading branch information
JaapWijnen committed Sep 22, 2016
commit 4efac1614da03629229c2913da7896ce27199ec0
36 changes: 19 additions & 17 deletions Ordered Array/OrderedArray.playground/Contents.swift
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
//: Playground - noun: a place where people can play

public struct OrderedArray<T: Comparable> {
private var array = [T]()
fileprivate var array = [T]()

public init(array: [T]) {
self.array = array.sort()
self.array = array.sorted()
}

public var isEmpty: Bool {
Expand All @@ -20,16 +20,16 @@ public struct OrderedArray<T: Comparable> {
}

public mutating func removeAtIndex(index: Int) -> T {
return array.removeAtIndex(index)
return array.remove(at: index)
}

public mutating func removeAll() {
array.removeAll()
}

public mutating func insert(newElement: T) -> Int {
let i = findInsertionPoint(newElement)
array.insert(newElement, atIndex: i)
public mutating func insert(_ newElement: T) -> Int {
let i = findInsertionPoint(newElement: newElement)
array.insert(newElement, at: i)
return i
}

Expand All @@ -47,18 +47,20 @@ public struct OrderedArray<T: Comparable> {

// Fast version that uses a binary search.
private func findInsertionPoint(newElement: T) -> Int {
var range = 0..<array.count
while range.startIndex < range.endIndex {
let midIndex = range.startIndex + (range.endIndex - range.startIndex) / 2
if array[midIndex] == newElement {
return midIndex
} else if array[midIndex] < newElement {
range.startIndex = midIndex + 1
} else {
range.endIndex = midIndex
}
var startIndex = 0
var endIndex = array.count

while startIndex < endIndex {
let midIndex = startIndex + (endIndex - startIndex) / 2
if array[midIndex] == newElement {
return midIndex
} else if array[midIndex] < newElement {
startIndex = midIndex + 1
} else {
endIndex = midIndex
}
}
return range.startIndex
return startIndex
}
}

Expand Down