PHP Bubble/Quick/select/Insert Sort algorithm example explanation

Source: Internet
Author: User
Tags arrays benchmark php example

The four basic sorting algorithms are: Bubble sort method, fast sorting method, select sorting method, insert Sort method, this article we use PHP example to explain the four basic sorts.

   1. Bubble sort

Train of thought analysis: In order to sort of a group of numbers, the current has not yet lined up the sequence, from the next two consecutive number of adjacent to the comparison and adjustment, so that the larger number to sink, smaller upward. That is, when the number of adjacent numbers in two is found to be the opposite of their sorting requirements, they are interchanged.

Code implementation:

$arr =array (1,43,54,62,21,66,32,78,36,76,39);
function Bubblesort ($arr)
{
$len =count ($arr);
This layer loops the number of wheels that need to bubble
for ($i =1; $i < $len; $i + +)
{//This layer loop is used to control the number of times a number needs to be compared per round
for ($k =0; $k < $len-$i; $k + +)
{
if ($arr [$k]> $arr [$k +1])
{
$tmp = $arr [$k +1];
$arr [$k +1]= $arr [$k];
$arr [$k]= $tmp;
}
}
}
return $arr;
}
   2. Select Sort

Code implementation:

function Selectsort ($arr) {
Double loop complete, outer control wheel number, inner layer control comparison times
$len =count ($arr);
For ($i =0 $i < $len-1; $i + +) {
Assume the position of the smallest value first
$p = $i;

for ($j = $i +1; $j < $len; $j + +) {
$arr [$p] is the currently known minimum value
if ($arr [$p] > $arr [$j]) {
Compare, find a smaller, recorded position of the minimum value, and compare it with a known minimum value for the next comparison.
$p = $j;
}
}
The position of the current minimum value has been determined and saved to the $p. If the location of the lowest value is found to be different from the current assumed position $i, the position is interchangeable.
if ($p!= $i) {
$tmp = $arr [$p];
$arr [$p] = $arr [$i];
$arr [$i] = $tmp;
}
}
Return final Result
return $arr;
}
   3. Insert Sort

Thought analysis: In order to sort of a group of numbers, assuming that the previous number is already in order, now to the number of n into the previous ordered number, so that the number of n is also ranked in order. Repeat the loop until all the order is sorted.

Code implementation:

function Insertsort ($arr) {
$len =count ($arr);
For ($i =1, $i < $len; $i + +) {
$tmp = $arr [$i];
Inner loop control, compare and insert
for ($j = $i-1; $j >=0; $j-) {
if ($tmp < $arr [$j]) {
Find the inserted elements to be small, swap positions, and swap the elements behind with the preceding elements
$arr [$j +1] = $arr [$j];
$arr [$j] = $tmp;
} else {
If you encounter an element that does not need to be moved, the previous one does not need to be compared again because it is already sorted.
Break
}
}
}
return $arr;
}
   4. Quick Sort

Analysis: Select a datum element, usually select the first element or the last element. Through a scan, the backlog sequence is divided into two parts, smaller than the Datum element, and one part greater than or equal to the datum element. At this point, the datum element is in the correct position after it is sorted, and then the same method is used to recursively sort the two parts of the partition.

Code implementation:

function QuickSort ($arr) {
Determine if you need to proceed
$length = count ($arr);
if ($length <= 1) {
return $arr;
}
Select the first element as the benchmark
$base _num = $arr [0];
Iterate over all elements except the ruler, and put them in two arrays by size
Initialization of two arrays
$left _array = Array (); Less than the benchmark
$right _array = Array (); That is greater than the datum
for ($i =1; $i < $length; $i + +) {
if ($base _num > $arr [$i]) {
Put an array to the left
$left _array[] = $arr [$i];
} else {
Put it on the right.
$right _array[] = $arr [$i];
}
}
And then recursively call this function with the same sort of arrangement for the left and right arrays.
$left _array = Quick_sort ($left _array);
$right _array = Quick_sort ($right _array);
Merge
Return Array_merge ($left _array, Array ($base _num), $right _array);
}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.