«Единственный способ творить великие дела – это любить то, что ты делаешь»
PHP


Простая сортировка массива или метод Пузырька

Задача - Простая сортировка массива - Пузырьковый метод

В PHP существуют простые и более сложные методы сортировки массивов.

Простые методы сортировки массивов - просты для понимания, но менее эффективны.
Другие методы сортировки массивов - сложнее понять, но они более эффективны.

Здесь будет рассмотрена простая сортировка или сортировка методом "Пузырька".

Сортировка пузырьком - это простой метод сортировки массивов или списков путем последовательного сравнения и обмена соседних элементов, если предшествующий оказывается больше последующего.

При сортировке будет применяться цикл for, в котором используется функция count() для подсчета числа элементов массива.

PHP-код

$ar = [1, 0, 6, 9, 4, 5, 2, 3, 8, 7];
	
	// Функция count() возвращает число элементов массива
	$n = count($ar);
	echo $n;
	
	echo "<p>";
		
	// Исходный массив
	print_r($ar);
	echo "<br>";
	
	// В условии цикла из числа элементов массива вычитается 1. Делается это для того, 
	// чтобы выйти из цикла при сравнении предпоследнего и последнего элементов массива, 
	// так как последний элемент массива не с чем будет сравнивать - см. условие if.
	
	for ($i=0; $i<count($ar)-1; $i++) {  
		if ($ar[$i] > $ar[$i+1]) {
			$tmp = $ar[$i];
			$ar[$i] = $ar[$i+1];
			$ar[$i+1] = $tmp;
		}
	}
	
	// Частично отсортированный массив
	print_r($ar);
	
	// Цикл внутри Цикла - Окончательно сортируем массив

 	for ($j=0; $j<count($ar)-1; $j++) { 
		for ($i=0; $i<count($ar)-1; $i++) {  
			if ($ar[$i] > $ar[$i+1]) {
				$tmp = $ar[$i];
				$ar[$i] = $ar[$i+1];
				$ar[$i+1] = $tmp;
			}
		}
		echo "<p>Итерация №".$j."<br>";
		print_r($ar);
	}
	
	// Полностью отсортированный массив
	echo "<p>";
	print_r($ar);

Результат


10

Array ( [0] => 1 [1] => 0 [2] => 6 [3] => 9 [4] => 4 [5] => 5 [6] => 2 [7] => 3 [8] => 8 [9] => 7 )
Array ( [0] => 0 [1] => 1 [2] => 6 [3] => 4 [4] => 5 [5] => 2 [6] => 3 [7] => 8 [8] => 7 [9] => 9 )

1. В результате прохождения цикла мы видим, что сортировка массива выполнена частично.
Для окончательной сортировки - необходимо это цикл поместить в другой/такой же цикл.

2. Этот метод имеет недостаток, и чтобы его увидеть необходимо:
вывести каждый этап сортировки - каждую Итерацию.

В данном случае видно, что уже на Итерации №2 массив полностью отсортирован.
Дальнейшие Итерации не имели смысла!!!
Поэтому в некоторых случаях, при работе с большими массивами, будет совершаться лишняя и довольна большая работа.
В этом и заключается НЕ эффективность Пузырькового метода

Итерация №0
Array ( [0] => 0 [1] => 1 [2] => 4 [3] => 5 [4] => 2 [5] => 3 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №1
Array ( [0] => 0 [1] => 1 [2] => 4 [3] => 2 [4] => 3 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №2
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №3
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №4
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №5
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №6
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №7
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Итерация №8
Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )

Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 5 [6] => 6 [7] => 7 [8] => 8 [9] => 9 )