      "    * If min < current element, swap\n",
      "\n",
      "Complexity:\n",
      "* Time: O(n^2) average, worst, best\n",
      "* Space: O(1) iterative, O(m) recursive where m is the recursion depth (unless tail-call elimination is available, then O(1)), generally not stable\n",
      "    * Note: Tail call elimination is not inherently available in Python. See the following [StackOverflow post](http://stackoverflow.com/a/13592002)."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
 
</s> remove     "        return self._sort_recursive(data, start)\n",
 </s> add     "        return self._sort_recursive(data, start=0)\n", </s> remove     "    def sort_recursive(self, data, start=0):\n",
 </s> add     "    def sort_recursive(self, data):\n",
    "* Space: O(1) iterative, O(m) recursive where m is the recursion depth (unless tail-call elimination is available, then O(1))\n",
    "    * Note: Tail call elimination is not inherently available in Python, see the following [StackOverflow post](http://stackoverflow.com/a/13592002).\n",
    "\n",
    "Misc: \n",
    "\n",
    "* In-place\n",
    "* Most implementations are not stable, due to swapping of values\n",
    "\n",
    "Selection sort might be a good option if moving elements is more expensive than comparing them, as it requires at most n-1 swaps.\n",
    "\n",
    "The finding of a minimum element can be done with a min heap, which would change the worst-case run time to O(n log(n)) and increase the space to O(n).  This is called a heap sort."
      "    * If min < current element, swap\n",
      "\n",
      "Complexity:\n",
      "* Time: O(n^2) average, worst, best\n",
    "* Space: O(1) iterative, O(m) recursive where m is the recursion depth (unless tail-call elimination is available, then O(1))\n",
    "    * Note: Tail call elimination is not inherently available in Python, see the following [StackOverflow post](http://stackoverflow.com/a/13592002).\n",
    "\n",
    "Misc: \n",
    "\n",
    "* In-place\n",
    "* Most implementations are not stable, due to swapping of values\n",
    "\n",
    "Selection sort might be a good option if moving elements is more expensive than comparing them, as it requires at most n-1 swaps.\n",
    "\n",
    "The finding of a minimum element can be done with a min heap, which would change the worst-case run time to O(n log(n)) and increase the space to O(n).  This is called a heap sort."
    "* Space: O(1) iterative, O(m) recursive where m is the recursion depth (unless tail-call elimination is available, then O(1))\n",
    "    * Note: Tail call elimination is not inherently available in Python, see the following [StackOverflow post](http://stackoverflow.com/a/13592002).\n",
    "\n",
    "Misc: \n",
    "\n",
    "* In-place\n",
    "* Most implementations are not stable, due to swapping of values\n",
    "\n",
    "Selection sort might be a good option if moving elements is more expensive than comparing them, as it requires at most n-1 swaps.\n",
    "\n",
    "The finding of a minimum element can be done with a min heap, which would change the worst-case run time to O(n log(n)) and increase the space to O(n).  This is called a heap sort."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
keep keep keep keep replace replace keep keep keep keep keep
 Update selection sort challenge algorithm discussion (#139) 
sorting_searching/selection_sort/selection_sort_solution.ipynb