Простая сортировка массива или метод Пузырька
Задача - Простая сортировка массива - Пузырьковый метод
В 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 )