diff --git a/Assignments/Sorting/InsertionSort.playground/Pages/Insertion Sort.xcplaygroundpage/Contents.swift b/Assignments/Sorting/InsertionSort.playground/Pages/Insertion Sort.xcplaygroundpage/Contents.swift index 98fc641..91af0c2 100644 --- a/Assignments/Sorting/InsertionSort.playground/Pages/Insertion Sort.xcplaygroundpage/Contents.swift +++ b/Assignments/Sorting/InsertionSort.playground/Pages/Insertion Sort.xcplaygroundpage/Contents.swift @@ -8,7 +8,18 @@ Note that there is already a `swap` function in the standard library. However, y */ func insertionSort(var array: [T], @noescape isOrderedBefore: (T, T) -> Bool) -> [T] { - + guard array.count > 1 else { return array } + + for i in 1.. 0 && isOrderedBefore(orderedItem, array[j-1]) { + array[j] = array[j-1] + j-- + } + array[j] = orderedItem + } + return array } @@ -17,13 +28,13 @@ func insertionSort(var array: [T], @noescape isOrderedBefore: (T, T) -> Bool) let items = ["c", "d", "b"] let sortedItems = insertionSort(items, isOrderedBefore: <) -//assert(sortedItems.isSorted()) +assert(sortedItems.isSorted()) assert(items == ["c", "d", "b"]) // double check that items does not change assert(insertionSort([1], isOrderedBefore: <).isSorted()) assert(insertionSort([1, 2, 3], isOrderedBefore: <).isSorted()) -//assert(insertionSort([1, 2, 3], isOrderedBefore: >).isSorted(>)) -//assert(insertionSort([3, 2, 1, 2, -1], isOrderedBefore: <).isSorted()) +assert(insertionSort([1, 2, 3], isOrderedBefore: >).isSorted(>)) +assert(insertionSort([3, 2, 1, 2, -1], isOrderedBefore: <).isSorted()) /*: [Table of Contents](Table%20of%20Contents) | [Previous](@previous) | [Next](@next)