Use PHP to write several common sorting algorithm programs
Sorting algorithms are often encountered in programming. This article will use PHP to implement several common sorting algorithms.
1. Bubble sorting
Bubble sorting is the simplest to understand, but the time complexity (O(n^2)) is also one of the largest. The implementation code is as follows:
function bubbleSort($arr) { $len = count($arr); for ($i = 0; $i < $len; $i++) { // 遍历i后面的元素,只要该元素小于当前元素,就把较小的往前冒泡 for ($j = $i + 1; $j < $len; $j++) { if ($arr[$i] > $arr[$j]) { $t = $arr[$i]; $arr[$i] = $arr[$j]; $arr[$j] = $t; } } } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
2. Selection sorting
Selection sorting is relatively simple to understand, and the time complexity is O(n^2). The implementation code is as follows:
function selectSort($arr) { $len = count($arr); for ($i = 0; $i < $len; $i++) { $minIndex = $i; // 找出i后面最小的元素与当前元素交换 for ($j = $i + 1; $j < $len; $j++) { if ($arr[$j] < $arr[$minIndex]) { $minIndex = $j; } } if ($minIndex != $i) { $t = $arr[$i]; $arr[$i] = $arr[$minIndex]; $arr[$minIndex] = $t; } } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
3. Insertion sorting
I feel that insertion sort is somewhat similar to bubble sort. The time complexity is also O(n^2). The implementation code is as follows:
function insertSort($arr) { $len = count($arr); for ($i = 1; $i < $len; $i++) { if ($arr[$i] < $arr[$i - 1]) { $t = $arr[$i]; $j = $i - 1; // 如果当前元素大于前一个元素,就往前挪 while ($j >= 0 && $t < $arr[$j]) { $arr[$j + 1] = $arr[$j]; $j--; } $arr[$j + 1] = $t; } } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
4. Hill sorting
Hill Sorting can actually be understood as an optimized version of insertion sort. Its efficiency is related to the increment. The increment is different depending on different arrays. Therefore, Hill sorting is an unstable sorting algorithm and its time is complex. The degree is between O(nlogn) and O(n^2). The implementation code is as follows:
function shellSort($arr) { $len = count($arr); $stepSize = floor($len / 2); while ($stepSize >= 1) { for ($i = $stepSize; $i < $len; $i++) { if ($arr[$i] < $arr[$i - $stepSize]) { $t = $arr[$i]; $j = $i - $stepSize; while ($j >= 0 && $t < $arr[$j]) { $arr[$j + $stepSize] = $arr[$j]; $j -= $stepSize; } $arr[$j + $stepSize] = $t; } } // 缩小步长,再进行插入排序 $stepSize = floor($stepSize / 2); } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
5. Heap sort
Heap sort is an efficient sorting algorithm. Its time The complexity is O(nlogn). The principle is: first convert the array into a maximum heap, then exchange the first element with the i-th element, then convert the remaining i-1 elements into a maximum heap, and then exchange the first element with the i-th element. 1 element is exchanged, and so on. The implementation code is as follows: function heapSort($arr) {
$len = count($arr); // 先建立最大堆 for ($i = floor(($len - 1) / 2); $i >= 0; $i--) { $s = $i; $childIndex = $s * 2 + 1; while ($childIndex < $len) { // 在父、左子、右子中 ,找到最大的 if ($childIndex + 1 < $len && $arr[$childIndex] < $arr[$childIndex + 1]) $childIndex++; if ($arr[$s] < $arr[$childIndex]) { $t = $arr[$s]; $arr[$s] = $arr[$childIndex]; $arr[$childIndex] = $t; $s = $childIndex; $childIndex = $childIndex * 2 + 1; } else { break; } } } // 从最后一个元素开始调整 for ($i = $len - 1; $i > 0; $i--) { $t = $arr[$i]; $arr[$i] = $arr[0]; $arr[0] = $t; // 调整第一个元素 $s = 0; $childIndex = 1; while ($childIndex < $i) { // 在父、左子、右子中 ,找到最大的 if ($childIndex + 1 < $i && $arr[$childIndex] < $arr[$childIndex + 1]) $childIndex++; if ($arr[$s] < $arr[$childIndex]) { $t = $arr[$s]; $arr[$s] = $arr[$childIndex]; $arr[$childIndex] = $t; $s = $childIndex; $childIndex = $childIndex * 2 + 1; } else { break; } } } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
6. Quick sort
Quick sort is also an efficient sorting algorithm, and its time complexity is also O(nlogn). The principle is: select a reference element, and then place the elements in the array that are smaller than this element to the left of the reference element, and the elements that are larger than it are placed to the right of the reference element. Then continue the same operation on both sides. The code is as follows:
function quickSort($arr) { $len = count($arr); quickSortRecursion($arr, 0, $len - 1); return $arr; } function quickSortRecursion(&$arr, $begin, $end) { if ($begin < $end) { $left = $begin; $right = $end; $temp = $arr[$begin];// $temp为基准元素 // 把小于$temp的元素放到$temp左边,大于它的放在右边 while ($left < $right) { while ($left < $right && $arr[$right] >= $temp) $right--; if ($left < $right) { $arr[$left++] = $arr[$right]; } while ($left < $right && $arr[$left] <= $temp) $left++; if ($left < $right) { $arr[$right--] = $arr[$left]; } } $arr[$left] = $temp; // 把数组分成两部分,递归调用该函数 quickSortRecursion($arr, $begin, $left - 1); quickSortRecursion($arr, $left + 1, $end); } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
7. Merge sort
The time complexity of merge sort is also O(nlogn). The principle is: for two sorted arrays, traverse the two arrays respectively, obtain the smaller elements and insert them into the new array, then the new array will also be sorted. The code is as follows:
function mergeSort($arr) { $len = count($arr); $arr = mergeSortRecursion($arr, 0, $len - 1); return $arr; } function mergeSortRecursion(&$arr, $begin, $end) { if ($begin < $end) { $mid = floor(($begin + $end) / 2); // 把数组不断拆分,只到只剩下一个元素,对于一个元素的数组,一定是排序好的 mergeSortRecursion($arr, $begin, $mid); mergeSortRecursion($arr, $mid + 1, $end); $i = $begin; $j = $mid + 1; $k = 0; $temp = array(); // 开始执行归并,遍历两个数组,从它们里面取较小的元素插入到新数组中 while ($i <= $mid && $j <= $end) { if ($arr[$i] < $arr[$j]) { $temp[$k++] = $arr[$i++]; } else { $temp[$k++] = $arr[$j++]; } } while ($i <= $mid) { $temp[$k++] = $arr[$i++]; } while ($j <= $end) { $temp[$k++] = $arr[$j++]; } for ($i = 0; $i < $k; $i++) { $arr[$i + $begin] = $temp[$i]; } } return $arr; } $arr = [3,1,13,5,7,11,2,4,14,9,15,6,12,10,8]; print_r(bubbleSort($arr));
This article explains in detail the use of PHP programs to implement the sorting algorithm. For more related content, please pay attention to the PHP Chinese website.
Related recommendations:
How does PHP determine whether it is an AJAX request?
Solutions to handling date() warnings reported by the PHP program
How to solve concurrency problems in PHP development Case discovery of implementation methods
The above is the detailed content of Use PHP to write several common sorting algorithm programs. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
