PHPの4つの基本的なソートアルゴリズム

準備オーケー

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

1つ、バブルソート

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ループの2番目のレベルは境界を制御します。$ 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から始めて、最小値を逆方向に見つけてから、2つの位置を入れ替えます。次に、1から始めて、最小値を見つけます。
  2. forループの最初のレベルは、最小値を見つける回数、時間の長さ、およびバブリングと自己実現の違いを制御します。
  3. forループの2番目のレベルは開始位置を制御し、$ iの前にソートされています。

3、挿入ソート

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ループの2番目のレベルは、左側の境界を制御します。
  4. バブリングに少し似ていますが、現在の値にのみ焦点を当て、その位置を見つけた直後に停止します。

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