R
E
A
C
T
O
xamples
epeat
ode
pproach
ptimize
est
{Selection Sort}
The Question
The Algorithm
[5, 2, 7, 20, 1, -1]
[-1, 2, 7, 20, 1, 5]
[-1, 1, 7, 20, 2, 5]
[-1, 1, 2, 20, 7, 5]
[-1, 1, 2, 5, 7, 20]
The Solution
function selectionSort(array) {
// For each element in the array...
for (var i = 0; i < array.length; i++) {
var minVal = array[i];
var minIdx = i;
// look through every element beginning there...
for (var j = i + 1; j < array.length; j++) {
// and keep track of the lowest one.
if (array[j] < array[minIdx]) {
minVal = array[j];
minIdx = j;
}
}
// Swap the lowest value with the current element
array[minIdx] = array[i];
array[i] = minVal;
}
return array;
}
The Performance
How fast is it?
O(n^2) - for each item in the array, it takes time proportional to the number of items in the array
How much space does it take?
O(n) total, O(1) extra - it's in place, so you're only using constant space in addition to the initial array
What about other sorting algorithms?
What should the interviewee do?
1. Implement Selection Sort
2. Talk about time and space complexity (O(n) notation)
3. Ask them to talk about space and time complexities of any other sorts they can think of (ask specifically at least about mergeSort and maybe bubbleSort)
Conclusion
Selection Sort is actually a pretty bad sorting algorithm, since it takes n^2 time and there are a lot of better ones that can be done in n log(n) time
Reacto: Selection Sort
By gtelljohann
Reacto: Selection Sort
- 1,993