function bubbleSort(values: number[]): number[] {
  let end = values.length - 1
  values = values.slice(0)
  let swapped
  do {
    swapped = false
    while (end > 0) {
      let left = 0
      let right = left + 1
      while (right <= end) {
        let leftValue = values[left]
        let rightValue = values[right]
        if (leftValue > rightValue) {
          values[left] = rightValue
          values[right] = leftValue
        }
        left++
        right++
        swapped = true
      }
      end--
    }
  } while (swapped)
  return values
}