php基础排序算法

冒泡排序

<?php
function bubbleSort($arr){
	//n-1轮
	for($i=1, $len=count($arr); $i<$len; $i++){
		//n-i次比较
		for($j=0; $j<$len-$i; $j++){
			if($arr[$j] > $arr[$j+1]){
				$tmp = $arr[$j];
				$arr[$j] = $arr[$j+1];
				$arr[$j+1] = $tmp;
			}
		}

		// print_r($arr); //每一轮都会冒泡一个最大的到最后
	}

	return $arr;
}

选择排序

function selectSort($arr){
	//n-1轮
	for($i=0, $len=count($arr); $i<$len-1; $i++){
		$minIdx = $i;
		//从$i向后寻找最小index
		for($j=$i+1; $j<$len; $j++){
			if($arr[$j] < $arr[$minIdx]){
				$minIdx = $j;
			}
		}

		// echo $minIdx, PHP_EOL;
		// 每轮最小index不同的话, 交换, 从而一直保持$i位置为每轮最小index
		if($minIdx != $i){
			$tmp = $arr[$i];
			$arr[$i] = $arr[$minIdx];
			$arr[$minIdx] = $tmp;
		}
	}

	return $arr;
}
插入排序
function insertSort($arr){
	//n-1轮
	for($i=1, $len=count($arr); $i<$len; $i++){
		$tmp = $arr[$i];
		for($j=$i-1; $j>=0; $j--){
			//要插入的数是tmp. 它会和$i前边的数比较, 并插入到合适位置. 因为前面的数已经有序, 所以, 如果要插入的数大, 那么不用交换了. 直接退出内层循环.
			if($tmp < $arr[$j]){
				$arr[$j+1] = $arr[$j];
				$arr[$j] = $tmp;
			}else{

				break;
			}
		}
	}

	return $arr;
}
快速排序
function quickSort($arr){
	if(count($arr) <= 1){
		return $arr;
	}

	$middle = $arr[0];
	$left = [];
	$right = [];
	for($i=1; $len=count($arr), $i<$len; $i++){
		if($arr[$i] <= $middle){
			$left[] = $arr[$i];
		}else if($arr[$i] > $middle){
			$right[] = $arr[$i];
		}
	}

	$left = quickSort($left);
	$right = quickSort($right);
	return array_merge($left, array($middle), $right);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值