PHP实现常见的排序方法

本文主要介绍了PHP中实现的四种基本排序算法:插入排序、快速排序、冒泡排序和选择排序,为面试复习提供了重要参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近面试总是问排序算法,所以总结一下PHP实现常见的四种排序算法:插入排序 快速排序 冒泡排序 选择排序

<?php
/**
PHP实现常见排序方法
以升序排列,从小到大
*/
class customsort{
	/**
	插入排序:从数组第二个元素开始,与前面元素比较,如果比前一个元素小则调换位置,否则继续下一个元素
	*/
	function insertsort($arr){
		$len = count($arr);
		if($len <= 1){
			return $arr;
		}
		for($i=1;$i<$len;$i++){
			//获取当前值
			$val = $arr[$i];
			//获取当前位置
			$pos = $i;
			while($pos > 0 && $arr[$pos - 1] > $val){
				$arr[$pos] = $arr[$pos - 1];
				$pos = $pos - 1;
			}
			$arr[$pos] = $val;
		}
		return $arr;
	}
	/**
	快速排序:取数组中一个值为中间值,其它值与这个值进行比较,大于中间值的放在right数组,小于中间值的放在left数组,递归排序两个数组,连接两个数组和中间值
	*/
	function quitsort($arr){
		$len = count($arr);
		if($len <= 1){
			return $arr;
		}
		$middle = $arr[0];
		$left = array();
		$right = array();
		for($i=1;$i<$len;$i++){
			if($middle < $arr[$i]){
				$right[] = $arr[$i];
			}else{
				$left[] = $arr[$i];
			}
		}
		//递归两个数组
		$left = $this->quitsort($left);
		$right = $this->quitsort($right);
		return array_merge($left,array($middle),$right);
	}
	/**
	冒泡排序:将相邻的两个值进行比较,如果前面的大则交换位置
	*/
	function bubblesort($arr){
		$len = count($arr);
		if($len <= 1){
			return $arr;
		}
		for($i=0;$i<$len -1;$i++){
			for($j=0;$j<$len - 1 - $i;$j++){
				if($arr[$j] > $arr[$j+1]){
					$temp = $arr[$j];
					$arr[$j] = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}
		}
		return $arr;
	}
	/**
	选择排序:在一组数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
	*/
	function selectsort($arr){
		$len = count($arr);
		if($len <= 1){
			return $arr;
		}
		for($i=0;$i<$len - 1;$i++){
			$p = $i;
			for($j=$i+1;$j<$len;$j++){
				if($arr[$p] > $arr[$j]){
					$p = $j;
				}
			}
			if($p != $i){
				$temp = $arr[$p];
				$arr[$p] = $arr[$i];
				$arr[$i] = $temp;
			}
		}
		return $arr;
	}
}
$arr = [2,1,3,4,2,8,4,9];
$sort = new customsort();
$result = $sort->insertsort($arr);
$result1 = $sort->quitsort($arr);
$result2 = $sort->bubblesort($arr);
$result3 = $sort->selectsort($arr);
var_dump($result,$result1,$result2,$result3);
?>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值