Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 19, 2023 01:23 pm GMT

Bubble Sort in PHP

Table of Contents

  • About Bubble Sort
  • Bubble Sort Algorithm
  • Function
  • Optimized version
  • Scripts
  • Time Complexity

About Bubble Sort

Bubble sort is a simple sorting algorithm that repeatedly steps through the list to be sorted. It compares each pair of adjacent items and swaps them to be in the correct order.

Also know for its inefficiency and time complexity of O(n^2).

Bubble sort algorithm

Let's sort an array of numbers(integers) [5, 1, 4, 3].

To make the algorithm easier to explain, let's visualize the array where the height represents the value.

bubble sort in php

The algorithm involves looping and comparing two values. For example, in a 4-value array, we would loop a maximum of 3 times, as we compare j and j+1.

In our example (the script is below):

$i = value of outer loop$j = value of inner loop$a[$j] = value of an array at the position of $j$a[$j+1] = value of an array at the position of $j+1

Comparison #1

We start at the beginning of the array and compare the first two elements, 5 and 1(before). Since 5 is greater than 1, we swap them(after).

bubble sort in php

Comparison #2

We increment the value of j in the loop and compare the next two elements, 5 and 4(before). Since 5 is greater than 4, we swap them(after).

bubble sort in php

Comparison #3

We increment the value of j in the loop and compare the next two elements, 5 and 3(before). Since 5 is greater than 3, we swap them(after).

bubble sort in php

NOTICE: It is important to note that the highest number, 5, is now in its correct sorted position and does not need to be compared again. In the next loop, we will only need to loop 2 times, as opposed to 3 times (the total number of elements in the array minus 1).

Comparison #4

Once our first loop is complete, we start again from the beginning of the array. We compare the first two elements, 1 and 4(before). Since 1 is not greater than 4, we continue in the loop without swapping them(after).

bubble sort in php

Comparison #5

We increment the value of j in the loop and compare the next two elements, 4 and 3(before). Since 4 is greater than 3, we swap them. We skip the number 5, as it is already in its sorted position(after).

bubble sort in php

Number 5 is already sorted so we skip it.

Comparison #6

In our last loop, we compare the first two elements, 1 and 3(before). Since 1 is not greater than 3, we continue in the loop without swapping them(after).

The final array looks like this(after): [1, 3, 4, 5].

bubble sort in php

Function

The loops

To compare two values in an array, we need a loop within a loop.

Instead of looping in the traditional way:

for ($i = 0; $i < count($a) - 1; $i++) { // outer loop  for ($j = $i + 1; $j < count($a); $j++) { // inner loop    // ...  }}

we do it in the opposite direction, where we decrement in the outer loop, so we can skip the last sorted number.

for ($i = count($a) - 1; $i > 0; $i--) { // outer loop  for ($j = 0; $j < $i; $j++) { // inner loop    // ...  }}

Swap

In the loop we check the two values and swap if $a[$j] > $a[$j + 1].

if ($a[$j] > $a[$j + 1]) {   $temp = $a[$j];  $a[$j] = $a[$j+1];  $a[$j+1] = $temp;}

Bubble Sort Algorithm

function bubbleSort(array $a): array{  for ($i = count($a) - 1; $i > 0; $i--) {    for ($j = 0; $j < $i; $j++) {      if ($a[$j] > $a[$j + 1]) {         $temp = $a[$j];        $a[$j] = $a[$j+1];        $a[$j+1] = $temp;      }    }  }  return $a;}// $bs = [5, 2, 8, 9, 1];// bubbleSort($bs);// [1, 2, 5, 8, 9]

Optimized version

But what if we have a situation where an array(on the left) is almost sorted and after an outer loop is finished we have all items sorted.

optimized bubble sort php

If we used the script above, we would have 15 comparisons for an array [6, 1, 2, 3, 4, 5]. However, it is clear that after the first loop, all numbers are sorted, meaning we do not have to loop through [1, 2, 3, 4, 5, 6] several more times.

We can optimize this by tracking whether any swaps were made during the outer loop. If there were no swaps, we can break the loop and return the array, as it is now sorted.

So we loop once more and if there is no swap, we can break the loop and return the array, because all is sorted.

Explanation:

  1. Let's define a variable $swap within the outer loop.
  2. We set $swap to true if there is a swap in the condition.
  3. If there is no swap in the outer loop, we don't need to check the rest, so we break the loop and return the sorted array.

The following optimization has only 9 comparisons for an array [6, 1, 2, 3, 4, 5]. It skips the loops where $i = 3, 2, and 1.

function bubbleSortOptimized(array $a): array{  for ($i = count($a) - 1; $i > 0; $i--) {    $swap = false;    for ($j = 0; $j < $i; $j++) {      if ($a[$j] > $a[$j + 1]) {         $temp = $a[$j];        $a[$j] = $a[$j+1];        $a[$j+1] = $temp;        $swap = true;      }    }    if (!$swap) break;  }  return $a;}// $bs = [6, 1, 2, 3, 4, 5];// bubbleSortOptimized($bs);// [1, 2, 3, 4, 5, 6]

Scripts

Both scripts can be found here: https://gist.github.com/matusstafura/7b049a323624a99a9f0120492888621e

Time Complexity

The time complexity of bubble sort is O(n^2) in the worst and average cases, and O(n) in the best case (when the input is already sorted).


Original Link: https://dev.to/matusstafura/bubble-sort-in-php-846

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To