php 版本排序,四种常见排序算法--PHP版本

本文介绍了四种基本的排序算法:冒泡排序、选择排序、快速排序和插入排序。每种算法都有其独特的实现方式和时间复杂度。冒泡排序通过相邻元素比较交换实现排序;选择排序每次找到最小元素与当前未排序部分的第一个元素交换;快速排序采用分治策略,选取基准元素并进行分区操作;插入排序则是将每个元素插入到已排序部分的正确位置。此外,还提供了这些排序算法的时间复杂度和空间复杂度的比较。
摘要由CSDN通过智能技术生成

1、冒泡排序法

/**

* 冒泡排序

* des 对一组数据,比较相邻数据的大小,将值小数据在前面,值大的数据放在后面。

*/

$array = [2,5,1,3,7,4];

$result = bubble_sort($array);

print_r($result);

function bubble_sort($array){

$len = count($array);

for ($i=0; $i < $len; $i++) {

for ($j=0; $j < $len-$i-1; $j++) {

if($array[$j]>$array[$j+1]){

$tmp = $array[$j];

$array[$j] = $array[$j+1];

$array[$j+1] = $tmp;

}

}

}

return $array;

}

2、选择排序法

/**

* 选择排序

* des 在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

*/

$array = [2,5,1,3,7,4];

$result = select_sort($array);

print_r($result);

function select_sort($array){

$len = count($array);

$tmp = 0;

for ($i=0; $i < $len-1; $i++) {

$minIndex = $i;

for ($j=$i+1; $j < $len; $j++) {

if($array[$j]

$minIndex = $j;

}

}

if($i != $minIndex){

$tmp = $array[$i];

$array[$i] = $array[$minIndex];

$array[$minIndex] = $tmp;

}

}

return $array;

}

3、快速排序法

$array = [2,5,1,3,7,4];

$result = quick_sort($array);

print_r($result);

function quick_sort($array){

$len = count($array);

if($len <= 1){

return $array;

}

$base = $array[0];

$left_array = $right_array = array();

for ($i=1; $i < $len; $i++) {

if($array[$i]

$left_array[] = $array[$i];

}else{

$right_array[] = $array[$i];

}

}

$left_array = quick_sort($left_array);

$right_array = quick_sort($right_array);

return array_merge($left_array,array($base),$right_array);

}

4、插入排序法

/**

* 插入排序法

* des 在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

*/

$array = [2,5,1,3,7,4];

$result = insert_sort($array);

print_r($result);

function insert_sort($array){

$len = count($array);

for ($i=1; $i < $len; $i++) {

$tmp = $array[$i];

for ($j=$i-1; $j >= 0; $j--) {

if($tmp

$array[$j+1] = $array[$j];

$array[$j] = $tmp;

}else{

break;

}

}

}

return $array;

}

附上常见算法时间复杂度、空间复杂度对比

排序法

最差时间分析

平均时间复杂度

稳定度

空间复杂度

冒泡排序

O(n2)

O(n2)

稳定

O(1)

快速排序

O(n2)

O(n*logn)

不稳定

O(logn)~O(n)

选择排序

O(n2)

O(n2)

稳定

O(1)

二叉树排序

O(n2)

O(n*log2n)

不一顶

O(n)

插入排序

O(n2)

O(n2)

稳定

O(1)

堆排序

O(n*log2n)

O(n*log2n)

不稳定

O(1)

希尔排序

O

O

不稳定

O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值