Selection sort works by iteratively finding the minimum element in the unsorted portion of an array and swapping it into the sorted position. It has a time complexity of O(n^2) and is inefficient for large data sets. Bubble sort compares adjacent elements and swaps them if out of order, causing the largest elements to "bubble" to the end with each pass. Insertion sort inserts elements into the sorted portion of the array by shifting greater elements to make room. Both bubble and insertion sort have quadratic time complexity but insertion sort is generally more efficient due to less element swapping.