Es bastante simple, para cada numero mira si los siguientes son menores, en el caso de que lo sean, llama a la función que los cambia, es una manera eficiente de ordenar una lista. Por ahí te han dejado un link a la wikipedia que lo explica bastante bien.
No es una forma nada eficiente de ordenar el algoritmo de ordenación por selección. Lo que sucede es que es muy simple y por eso es de los primeros algoritmos que se enseñan. Este algoritmo tiene un coste de O(n2), mientras que otros algoritmos de ordenación como heap sort, merge sort o quicksort tienen costes O(nlogn) (quicksort en caso peor es cuadrático, pero en caso medio tiene esa complejidad). De los algoritmos cuadráticos típicos (selection sort, bubble sort e insertion sort), el único que sirve es insertion sort, porque aunque sea cuadrático en caso peor, generalmente es algo mejor y para entradas pequeñas es más rápido que los que he dicho antes.