HomePHP Page 2 - Collections and Sorting Continued
Sort Algorithms of Quadratic Complexity - PHP
In the first part of this series we implemented a basic sortable collection class. We used a Bubble Sort algorithm to order the elements in the collection, which came with a disclaimer regarding what a slow sort it is. This article will examine the primary sorting algorithms with code examples, and some empirical data regarding how they perform in relation to one another, as well as the size of the data set in question.
Bubble sort, insertion sort, selection sort and shell sort are algorithms of quadratic complexity. In the first part of this article, we implemented the bubble sort with the following code in the Sort() method from our People Collection class:
public function Sort() { for ($i = $this->data->count() - 1; $i >= 0; $i--) { $flipped = false; for ($j = 0; $j < $i; $j++) { if (strcmp($this->data[$j]->GetSortKey(), $this->data[$j + 1]->GetSortKey()) > 0) { $tmp = $this->data[$j]; $this->data->offsetSet($j, $this->data [$j + 1]); $this->data->offsetSet($j + 1, $tmp); $flipped = true; } } if (!$flipped) return; } }
Very simple and straightforward. I will not explain the code in the algorithms in this article, I leave it to you the reader as an exercise. You will benefit from learning how these algorithms work if you do not know already! Let’s have a look at the code for an insertion sort:
All of these sorts are slow. The shell sort is dramatically faster than the rest, but still slow relative to the algorithms. Before we delve into performance, though, I want to show the code for the n log n complexity algorithms.