PHP四种基础排序算法

准备工作

<?php
//待排序数组
$arr = [7, 1, 3, 2, 6, 5, 4, 0];

一、冒泡排序

function bubbleSort($arr)
{
    
    
	$len = count($arr);
	if ($len <= 1) {
    
    
		return $arr;
	}
  	for ($i = 1; $i < $len; ++$i) {
    
    
		for ($j = 0; $j < $len - $i; ++$j) {
    
    
	  		if ($arr[$j] > $arr[$j + 1]) {
    
    
	  			$temp = $arr[$j + 1];
	  			$arr[$j + 1] = $arr[$j];
	  			$arr[$j] = $temp;
	  		}
		}
  	}
  	return $arr;
}
  1. 比较n和n+1项,如果n项>n+1项,交换位置。
  2. 实际是依次找最大值。
  3. 第一层for循环控制找最大值的次数,长度-1次。
  4. 第二层for循环控制边界,$i代表末尾已经排序过了几个最大值。

二、选择排序

function selectSort($arr)
{
    
    
	$len = count($arr);
	for ($i = 0; $i < $len; ++$i) {
    
    
		$k = $i;
		for ($j = $i + 1; $j < $len; ++$j) {
    
    
			if ($arr[$j] < $arr[$k]) {
    
    
				$k = $j;
			}
		}
		if ($k !== $i) {
    
    
			$temp = $arr[$k];
			$arr[$k] = $arr[$i];
			$arr[$i] = $temp;
		}
	}
	return $arr;
}
  1. 从0开始,向后找最小值,然后交换两个的位置。再从1开始找最小值,以此类推。
  2. 第一层for循环控制找最小值的次数,长度次,和冒泡不同处自行体会。
  3. 第二层for循环控制开始位置,$i前都是已经排序过了的。

三、插入排序

function insertSort($arr)
{
    
    
	$len = count($arr);
	if ($len <= 1) {
    
    
		return $arr;
	}
	for ($i = 1; $i < $len; ++$i) {
    
    
		$temp = $arr[$i];
		for ($j = $i - 1; $j > -1; --$j) {
    
    
			if ($temp < $arr[$j]) {
    
    
				$arr[$j + 1] = $arr[$j];
				$arr[$j] = $temp;
			} else {
    
    
				break;
			}
		}
	}
	return $arr;
}
  1. 当前项向前比较交换,直至不大于那一项,跳出循环。
  2. 第一层for循环控制代表多少项需要比较。
  3. 第二层for循环控制左边界。
  4. 有点像冒泡,但是只关注当前值,找到自己的位置后立即停止。

四、快速排序

function quickSort($arr)
{
    
    
	$len = count($arr);
	if ($len <= 1) {
    
    
		return $arr;
	}
	$left = $right = [];
	for ($i = 1; $i < $len; ++$i) {
    
    
		if ($arr[$i] < $arr[0]) {
    
    
			$left[] = $arr[$i];
		} else {
    
    
			$right[] = $arr[$i];
		}
	}
	$left = quickSort($left);
	$right = quickSort($right);
	return array_merge($left, [$arr[0]], $right);
}
  1. 以数组第一项为标准,将其他项分拣到左右两个数组里,再递归操作。
  2. 递归递归递归递归。

猜你喜欢

转载自blog.csdn.net/z772532526/article/details/83544832