Суть: Попарное сравнение соседних элементов, которое позволяет текущему, «лучшему» элементу «всплыть».

[https://github.com/il-bychkov/algorithms](https://lh7-us.googleusercontent.com/i1aCrgq8ihUHbqqb2PXTXCiDdYz4qRPgAiP662db-P7MraPphc4VLXzczg3c94S_cQiC0TGWkWFQaOpfbYkYLTWowW9YalabYgkcKD-C_RZpk1auhmxrbI5Ko2ONoC3rOqzk-G1i6MJQpER5KcWXrg)

https://github.com/il-bychkov/algorithms

while (!noSwapsDone) {
	noSwapsDone = true; 
	for (int i = 0; i < n - 1; i++) {
		if (arr[i] > arr[i+1]) {
			swap(arr[i], arr[i+1]);
			noSwapsDone = false; 
		}
	}
}

Сложность по времени:

Лучший случай: $O(n)$ массив уже отсортирован, над каждым элементом, кроме первого будет производиться одна операция, итог: n-1

Средний случай: $O(n^2)$

Худший случай: $O(n^2)$ все числа идут не в нужном порядке (например, отсортированы по противоположному критерию), над каждым элементом будет производиться как минимум по 1 операции, но может это происходить несколько раз, итог: n*(n-1)/2 = O(n^2)