php实现的常见排序算法汇总
PHP实现的常见排序算法概览
```php
function insertSort($arr){
$count = count($arr);
if($count < 2){
return $arr;
}
for($i=1; $i<$count; $i++){
$tmp = $arr[$i];
$j=$i-1;
while($j >= 0 && $arr[$j] > $tmp){
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
$j--;
}
}
return $arr;
}
```
二、选择排序
选择排序的工作原理是遍历数组,找到最小(或最大)的元素,存放到数组的起始位置,然后再从剩余未排序的元素中找到最小(或最大)的元素,放到已排序的序列的末尾。选择排序的时间复杂度也是O(n^2)。以下是PHP实现的选择排序代码示例:
```php
function selectSort($arr){
$count = count($arr);
if($count < 2){
return $arr;
}
for($i=0; $i<$count; $i++){
$min=$i;
for($j=$i+1; $j<$count; $j++){
if($arr[$min] > $arr[$j]){
$min = $j; //找到最小的那个元素的下标
}
}
if($min != $i){//如果下标不是$i则互换。
$tmp = $arr[$i];
$arr[$i] = $arr[$min];
$arr[$min] = $tmp;
}
}
return $arr;
}
```
三、冒泡排序
PHP中的排序算法
在PHP中,排序算法的实现是编程中不可或缺的一部分。让我们来几种常见的排序算法以及它们的PHP实现。
一、冒泡排序
冒泡排序是一种简单的排序算法,它通过重复地遍历要排序的数组,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。这个过程会一直重复,直到没有更多的元素需要交换为止。以下是冒泡排序的PHP实现:
function bubbleSort($arr) {
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
for ($j = $i + 1; $j < $count; $j++) {
if ($arr[$i] > $arr[$j]) {
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
?>
二、快速排序
快速排序是一种高效的排序算法,它的基本思想是通过选择一个元素作为基准,将数组分为两部分,左边的元素都比基准小,右边的元素都比基准大。然后对左右两部分递归地进行快速排序。以下是快速排序的PHP实现:
function quickSort($arr) {
$count = count($arr);
if ($count < 2) {
return $arr;
}
$key = $arr[0]; // 选择第一个元素作为比较元素,也可以选其他元素
$left = array();
$right = array();
for ($i = 1; $i < $count; $i++) {
if ($key >= $arr[$i]) {
$left[] = $arr[$i];
} else {
$right[] = $arr[$i];
}
}
$left = quickSort($left); // 对左边部分进行递归排序
$right = quickSort($right); // 对右边部分进行递归排序
return array_merge($left, $right); // 将左右两部分合并得到最终的排序结果
}
深入理解堆排序算法在PHP程序设计中的应用
在PHP程序设计中,堆排序算法是一种高效的排序方法。本文将通过一个具体的实例,详细介绍堆排序算法的实现过程,并其在PHP中的应用。
一、引言
堆排序是一种基于二叉堆的排序算法。在堆排序中,我们需要实现两个关键函数:fixDown函数和headSort函数。fixDown函数用于调整堆的结构,而headSort函数则负责整个排序过程。
二、fixDown函数
fixDown函数用于对堆中的某个节点进行向下调整,以确保堆的性质得以维持。在调整过程中,我们需要关注节点的父子关系。当起始节点为1时,父节点k的子节点为2K和2K+1。当子节点j存在时,其父节点为floor(j/2)。
在PHP中,我们可以使用以下代码实现fixDown函数:
```php
function fixDown(&$arr, $k, $lenth) {
while ($k < $lenth && 2$k <= $lenth) { //只要当前节点有子节点,就需要继续循环调整
$j = 2$k; // 子节点的索引值
// 如果右子节点存在且大于左子节点,则切换到右子节点进行操作
if ($j < $lenth - 1 && $arr[$j] < $arr[$j+1]) $j++;
// 如果子节点小于父节点,则需要进行调整
if ($arr[$j] < $arr[$k]) break;
// 交换父节点和子节点的值
list($arr[$k], $arr[$j]) = array($arr[$j], $arr[$k]);
$k = $j; // 继续调整子节点
}
}
```
三、headSort函数
headSort函数是整个堆排序过程的入口点。它首先构建一个最大堆,然后通过不断取出最大元素并将其与最后一个元素交换位置,再调整剩余元素为最大堆,最终实现整个数组的排序。
在PHP中,我们可以使用以下代码实现headSort函数:
```php
function headSort(&$arr) {
$len = count($arr); // 获取数组长度
buildMaxHeap($arr); // 构建最大堆(此处省略buildMaxHeap函数实现)
for ($i = $len - 1; $i > 0; $i--) { // 从最后一个元素开始,依次将最大元素放到数组前面并调整堆结构
list($arr[0], $arr[$i]) = array($arr[$i], $arr[0]); // 将最大元素与当前位置的元素交换位置
fixDown($arr, 1, $len - $i); // 调整堆结构,确保剩余元素仍为最大堆
}
}
```
四、示例代码
下面是一个使用堆排序算法对数组进行排序的示例代码:
```php
$arr = array(4, 6, 4, 9, 2, 3); // 待排序数组
headSort($arr); // 进行堆排序操作
print_r($arr); // 输出排序后的结果:Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 4 [4] => 6 [5] => 9 ) (可能顺序不一致)这就是本文的全部内容了。希望本文所述内容对您的PHP程序设计有所帮助。如有任何疑问或建议,请随时与我们联系。期待您的反馈!
网络推广网站
- php实现的常见排序算法汇总
- 详解MySQL中concat函数的用法(连接字符串)
- 微信小程序 picker 组件详解及简单实例
- jQuery+PHP实现可编辑表格字段内容并实时保存
- SQL中实现SPLIT函数几种方法总结(必看篇)
- 详解angularJs指令的3种绑定策略
- Bootstrap源码解读模态弹出框(11)
- Laravel开启跨域请求的方法
- 浅谈js中几种实用的跨域方法原理详解
- js图片轮播插件的封装
- PHP使用pcntl_fork实现多进程下载图片的方法
- SQL重复记录查询 查询多个字段、多表查询、删除
- JS实现点击按钮控制Div变宽、增高及调整背景色的
- 一个用xslt样式将xml解析为xhtml的类TransformBinder(
- vue 实现axios拦截、页面跳转和token 验证
- 把Dapper 换成 SqlSugar ORM类的方法详解