4个常见的排序算法

<?php
class SortData {
	/**
	 * @desc: 冒泡排序(升序)  时间复杂度 O(n的平方)   空间复杂度  O(1)  稳定
	 * @author:dingling
	 * @date:2020/4/30
	*/
	public function bubbleSort($arr){
		$len = count($arr);
		for($i=1;$i<$len;$i++){
			for($j=0;$j<$len-$i;$j++){
				if( $arr[$j] > $arr[$j+1] ){
					$tmp = $arr[$j+1];
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}
			}
		}
		return $arr;
	}

	/**
         * @desc: 冒泡排序(降序)  时间复杂度 O(n的平方)   空间复杂度  O(1)  稳定
         * @author:dingling
         * @date:2020/4/30
        */
        public function bubbleSort2($arr){
                $len = count($arr);
		for( $i=1; $i<$len; $i++ ){
			for($j=0;$j<$len-$i;$j++){
				if( $arr[$j] < $arr[$j+1] ){
					$tmp = $arr[$j+1];
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}
			}
		}
		return $arr;
	}
	
	/**
         * @desc: 插入排序   时间复杂度 O(n的平方)   空间复杂度  O(1)  稳定
         * @author:dingling
         * @date:2020/4/30
        */
	public function insertSort($arr){
		$len = count($arr);
		for($i=1;$i<$len;$i++){
			$tmp = $arr[$i];
			for($j=$i-1;$j>=0;$j--){
				if($tmp < $arr[$j]){
					$arr[$j+1] = $arr[$j];
					$arr[$j] = $tmp;
				}else{
					break;
				}
			}
		}
		return $arr;
	}

	/**
         * @desc: 快速排序   时间复杂度 O(nlog2为底n)   空间复杂度  O(nlog2为底n)  不稳定
         * @author:dingling
         * @date:2020/4/30
        */
	public function quickSort($arr){
		$len = count($arr);
		if($len <= 1){return $arr;}

		$base_num = $arr[0];
		$left_arr = [];
		$right_arr = [];

		for( $i=1;$i<$len;$i++ ){
			if( $base_num > $arr[$i] ){
				$left_arr[] = $arr[$i];
			}else{
				$right_arr[] = $arr[$i];
			}
		}
		$left_arr = $this->quickSort($left_arr);
		$right_arr = $this->quickSort($right_arr);

		return array_merge($left_arr,[$base_num],$right_arr);
	}

	

	/**
         * @desc: 选择排序   时间复杂度 O(n的平方)   空间复杂度  O(1)  不稳定
         * @author:dingling
         * @date:2020/4/30
        */
	public function selectSort($arr){
		$len = count($arr);

		for($i=0;$i<$len-1;$i++){
			$p = $i;
			for($j=$i+1;$j<$len;$j++){
				if( $arr[$j] < $arr[$p] ){
					$p = $j;
				}
			}
			if($p != $i){
				$tmp = $arr[$p];
				$arr[$p] = $arr[$i];
				$arr[$i] = $tmp;
			}
		}
		return $arr;
	}
}


$arr = [32,23,54,1,56,32,45,6,8,29];
$obj = new SortData();
$arr2 = $obj->bubbleSort($arr);
var_dump($arr2);
$arr2 = $obj->bubbleSort2($arr);
var_dump($arr2);
$arr2 = $obj->quickSort($arr);
var_dump($arr2);
$arr2 = $obj->insertSort($arr);
var_dump($arr2);
$arr2 = $obj->selectSort($arr);
var_dump($arr2);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扬子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值