Посмотрите, как работают ваши функции, начиная с последнего элемента
sort(List()) // List()
compute(0, List()) // List(0)
sort(List(0)) // List(0)
compute(2, List(0)) // List(0, 2)
sort(List(2, 0)) // List(0, 2)
compute(1, List(0, 2)) // List(0, 1, 2)
sort(List(1, 0, 2)) // List(0, 1, 2)
compute(7, List(0, 1, 2)) // List(0, 1, 2, 7)
sort(List(7, 0, 1, 2)) // List(0, 1, 2, 7)
compute(23, List(0, 1, 2, 7)) // List(0, 1, 2, 7, 23)
sort(List(23, 0, 1, 2, 7)) // List(0, 1, 2, 7, 23)
compute(43, List(0, 1, 2, 7, 23)) // List(0, 1, 2, 7, 23, 43)
sort(List(43, 0, 1, 2, 7, 23)) // List(0, 1, 2, 7, 23, 43)
compute(12, List(0, 1, 2, 7, 23, 43)) // List(0, 1, 2, 7, 12, 23, 43)
sort(List(12, 0, 1, 2, 7, 23, 43)) // List(0, 1, 2, 7, 12, 23, 43)
compute(3, List(0, 1, 2, 7, 12, 23, 43)) // List(0, 1, 2, 3, 7, 12, 23, 43)
sort(List(3, 0, 1, 2, 7, 12, 23, 43)) // List(0, 1, 2, 3, 7, 12, 23, 43)
compute
подталкивает элемент («пузырь») до нужного места.