1. 冒泡排序:
冒泡排序法
<?php
//冒泡排序法
$lists = [20,5,33,14,28,38,1];
//统计数组个数
$len = count($lists);
//这里 $i=0 可以看做第一个位置
for($i = 0; $i < $len; $i++){
for($j = $i+1; $j < $len; $j++){
// $j 从第二个位置开始一直到最后一个位置, 取到对应值与 第一个位置 ($i = 0) 进行比较,这样第一趟后,$i = 0 就是最小值了,
// 也就是所谓的 “冒泡”
//与 $i=0 位置数值进行比较交换
if($lists[$i] > $lists[$j]){
$temp = $lists[$i];
$lists[$i] = $lists[$j];
$lists[$j] = $temp;
}
}
}
print_r($lists);
?>
2.快速排序法
快速排序法
<?php
//快速排序法必须定义一个“递归”函数
function fastSort($arr){
//定义“递归”退出机制
$len = count($arr);
if($len <= 1) return $arr;
//定义枢轴为每个数组第一个数值
$middle = $arr[0];
//初始化作用两边数组
$left = $right = [];
//根据枢轴区分左右两边数组内容
for($i = 1; $i < $len; $i++){
if($arr[0] > $arr[$i]){
array_push($left,$arr[$i]);
}else{
array_push($right,$arr[$i]);
}
}
//左右数组进行“递归”处理
$left = fastSort($left);
$right = fastSort($right);
return array_merge(array_merge($left,[$middle]),$right);
}
//快速排序法
$lists = [20,5,33,14,28,38,1];
$lists = fastSort($lists);
print_r($lists);
?>
3.插入排序法
插入排序法
<?php
//插入排序法
$lists = [20,5,33,14,28,38,1];
$len = count($lists);
//采用插入位置(从第二个位置数值开始),与前面数值进行比较交换位置
//最终开始到插入位置是一个有序的从小到大的排序 (插入位置为最大值)
for($i = 1; $i < $len; $i++){
//前面数值与插入位置值进行比较,调换值
for($j=0; $j < $i; $j++){
if($lists[$i] < $lists[$j]){
$temp = $lists[$j];
$lists[$j] = $lists[$i];
$lists[$i] = $temp;
}
}
}
print_r($lists);
?>
4.选择排序法
选择排序法
<?php
//选择排序法
$lists = [20,5,33,14,28,38,1];
$len = count($lists);
//从第一个位置先后面跑
for($i=0; $i<$len; $i++){
//第一个位置默认为最小值
$key = $i;
//从第二个位置数值开始进行比较
for($j=$i+1; $j<$len; $j++){
if($lists[$j] < $lists[$i]){
//获取第一个位置最小值位置
$key = $j;
}
}
//将第一次最小值位置值与第一个位置数值进行调换
if($i != $key){
$temp = $lists[$key];
$lists[$key] = $lists[$i];
$lists[$i] = $temp;
}
}
print_r($lists);
?>
5.归并排序法
归并排序法
<?php
//归并排序
function mergeSort($arr)
{
$n = count($arr);
//设置好递归函数退出机制
if($n <= 1){
return $arr;
}
//对数组进行左右递归切割
$half = ceil($n/2);
$temp = array_chunk($arr,$half);
$left = mergeSort($temp[0]);
$right = mergeSort($temp[1]);
$reg = [];
while(count($left) && count($right)){
if($left[0] < $right[0]){
$reg[] = array_shift($left);
}else{
$reg[] = array_shift($right);
}
}
return array_merge($reg,$left,$right);
}
//归并排序法
$lists = [20,5,33,14,28,38,1,8];
$lists = mergeSort($lists);
print_r($lists);
?>
网友评论