This might be trivial, but I don’t understand why the default implementation of Selection Sort is not stable?
At each iteration you find the minimum element in the remaining array. When finding this minimum, you can choose the first minimum you find, and only update it when an element is actually smaller than it. So, the chosen element at each iteration is the first minimum – meaning, it’s first on the previous sort order. So, to my understanding, the current sort will not destroy an order generated by a previous sort on equal elements.
What am I missing?
A small example:
Let b = B in
< B > , < b > , < a > , < C > (with a < b < c)
After one cycle the sequence is sorted but the order of B and b has changed:
< a > , < b > , < B > , < c >
But you can however implement Selections Sort stable if you, instead of switching, insert the minimum value. But for that to be efficient you should have a data structure that supports insertion at a low cost or otherwise you end up with quadratic complexity.