Bubble sort is one of the basic sorting algorithms. It gets its name because it bubbles up the values. It works by making passes through the array, comparing index pairs and swapping them.

Say we wanted to sort the following array min-max.

```
[1, 5, 99, 65, 100, 4, 12]
```

We would start with `1`

and `5`

. Since `5`

is bigger than `1`

, we don't need to swap. We then go to `5`

and `99`

. Still no swapping required. Now, we get to `99`

, and `65`

. `99`

is bigger, so we swap the pair. The array is now `[1, 5, 65, 99, 100, 4, 12]`

. Next is `99`

and `100`

. No swap. `100`

and `4`

. Swap. And finally, `100`

swaps with `12`

. Notice in the first pass we bubbled up the highest number to the end.

We continue this pattern of sweeping through the array and comparing value pairs, each time bubbling up the next highest number.

Generally speaking this algorithm does not apply to many real world scenarios because it is slow. Worst case is `O(n2)`

.

Final sort: `[1, 4, 5, 12, 65, 99, 100]`

Here is the implementation:

```
function bubbleSort(arr) {
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length - i; j++) {
if (arr[j - 1] > arr[j]) {
let temp = arr[j - 1]
arr[j - 1] = arr[j]
arr[j] = temp
}
}
}
}
```