# O

xamples

epeat

ode

pproach

ptimize

est

### 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

By gtelljohann

• 923