0%

PHP知识点整理(三) - 基础排序算法

了解如何快速使用程序进行排序,对于程序运行速度的提升,对于程序的优化有着很关键的作用,今天先来总结一下几种最基础也是最经典的排序算法。

一、冒泡排序

依次比较相邻两个元素大小,将小的的放前面,大的放后面,直至最后两个数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
namespace BubbleSort;

function bubbleSort($array){
if (!is_array($array)){
return false;
}
if (count($array) <2) return $array;
$length = count($array);
for ($i = 0;$i<$length-1; $i++){
for ($j = 0; $j<$length-$i-1;$j++){
if ($array[$j] >$array[$j+1]) {
$temp = $array[$j];
$array[$j] = $array[$j+1];
$array[$j+1] = $temp;
}
}
}
return $array;
}

$arr = [2,6,2,8,2,34,5,9,2341,23];
var_dump(bubbleSort($arr));
?>

二、快速排序

  1. 从序列当中选择一个基准数,一般取第一个
  2. 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧。
  3. 重复前两个步骤,直到所有子集当中只有一个元素为止。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
namespace QuickSort;

function quickSort($arr){
if(!is_array($arr)) return false;

$length = count($arr);
if ($length <=1) return $arr;

$left = $right = array();

for ($i=1;$i<$length;$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);
}
$arr = [34,56,8,79,12,3];
var_dump(quick_sort($arr));
?>

三、插入排序

每次从无序列表中取出第一个元素,把他插入到有序表中的合适位置,使有序表仍然有序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace InsertSort;

function insertSort($arr){
if (count($arr)<2) return $arr;

if (!is_array($arr)) return false;

$length = count($arr);

for ($p = 1; $p<$length; $p++){
$temp = $arr[$p];
for ($i = $p ; $i>0&& $arr[$i-1]>$temp;$i--){
$arr[$i] = $arr[$i-1];
}
$arr[$i] = $temp;
}
return $arr;
}
$arr = [34,56,8,79,12,3];
var_dump(insertSort($arr));
?>

四、选择排序

每次从待排序的元素中的第一个元素,设为最小值,再遍历每一个没有排序的元素,如果元素小于现在的最小值,就将这个元素设为最小值和第一个没有排过序的元素交换位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
namespace SelectSort;

function selectSort($arr){
$length = count($arr);

for ($i =0;$i<$length;$i++){
$min = $i;

for ($j = $i+1; $j<$length;$j++){
if ($arr[$j]<$arr[$min]){
$min = $j;
}
}

if ($min != $i) {
list($arr[$i], $arr[$min]) = [$arr[$min], $arr[$i]];
}
}
return $arr;
}

$arr = [34,56,8,79,12,3];
var_dump(selectSort($arr));
?>

Welcome to my other publishing channels