-
Notifications
You must be signed in to change notification settings - Fork 43
Open
Labels
Description
When you ask someone to sort a list of numbers in ascending order, you will see that the common intuition will be like "Select the minimum card and put it in the first place. Select the second minimum and put it in the second place. And so on". This is called selection sort.
- Write a
selectionSortfunction that takes an integer array and returns it as sorted in ascending order. Don't mutate the original array (don't useinout). Note that there is already aswapfunction in the standard library. When using theswap, you need to guard it from swapping a location with itself. - Turn the function into a generic function so that it can sort any type of array. Only constraint is that elements of the array should conform to the
Comparableprotocol. - Instead of sorting the array in ascending order, modify your function to accept a closure that takes two arguments of the same type as the array’s contents, and returns Bool. You can name this closure parameter
isOrderedBefore(as in sort function of the standard library). Check what@noescapemeans in Swift. Also you now use another function to do the comparison, you can remove theComparableconstraint. - Instead of only sorting arrays, modify your function to sort any type conforming to
SequenceType. Make your function to be an extension ofSequenceTypeso that we can use it as[1, 3, 2].selectionSort(<)and[1: "b", 2: "a"].selectionSort {$0.0 > $1.0}.
Due Date: Next Wednesday 25.11.2015
Next assignment will be about writing an insertion sort (as you guessed). Feel free to send comments 😄