1、冒泡排序
原理:对一组数据,比较相邻数的大小,将值大的放到后面。
<?php
// 冒泡排序
function bubbleOrder($arr)
{
$count = count($arr);
$temp = 0;
// 外层控制排序次数
for ($i = 0; $i < $count - 1; $i++) {
// 内层控制每轮比较次数
for ($j = 0; $j < $count - 1 - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
$temp = $arr[$j];
$arr[$j] = $arr[$j + 1];
$arr[$j + 1] = $temp;
} // print_r($arr); echo "<br>";
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = bubbleOrder($arr);
var_dump($res);
2、选择排序
原理:在一组数据中,选出最小的数与第一个位置交换,
然后在剩下的数据中在找出最小的数和第二个位置交换
然后在剩下的数据中在找出最小的数和第三个位置交换
依次类推直到倒数第二个数和最后一个数对比
<?php
// 选择排序
function selcetOrder($arr)
{
// 定义中间变量
$temp = 0;
$count = count($arr);
for ($i = 0; $i < $count - 1; $i++) {
//定义最小位置
$minIndex = $i;
for ($j = $i + 1; $j < $count; $j++) {
if ($arr[$j] < $arr[$minIndex]) {
$minIndex = $j;
}
}
if ($i != $minIndex) {
$temp = $arr[$i];
$arr[$i] = $arr[$minIndex];
$arr[$minIndex] = $temp;
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = selcetOrder($arr);
var_dump($res);
3、插入排序
原理: 将需要排序的书,与前面已经排好的数据从后往前进行比较,使其插入到相应的位置;
<?php
// 插入排序
function insertOrder($arr)
{
$len = count($arr);
//控制总循环次数
for ($i = 0; $i < $len; $i++) {
$temp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
//从当前位置从后往前进行对比
if ($temp < $arr[$j]) {
$arr[$j + 1] = $arr[$j];
$arr[$j] = $temp;
}else{
break;
}
}
}
return $arr;
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = insertOrder($arr);
var_dump($res);
4、快速排序
原理:初始一个中间值(一般选择第一个),将需要排序的数组分成3部分,小于中间的值放左边、中间值、大于中间值的放右边,继续用递归用相同的方式来排序左边和右边,最后合并数组
<?php
// 快速排序
function quickOrder($arr)
{
// 判断是否需要运行,下面要拿出一个中间值
if (count($arr)<=1) {
return $arr;
}
$middle = $arr[0]; // 中间值
$left = array();
$right = array();
for ($i = 1; $i < count($arr); $i++) {
if ($middle < $arr[$i]) {
$right[] = $arr[$i];
} else {
$left[] = $arr[$i];
}
}
// 递归排序划分好的2边数组
$left = quickOrder($left);
$right = quickOrder($right);
return array_merge($left, array($middle), $right);
}
$arr = array(5, 2, 7, 6, 9, 3);
$res = quickOrder($arr);
var_dump($res);
本文介绍了PHP中四种常见排序算法。冒泡排序是比较相邻数大小,将大值放后面;选择排序是不断选出最小数与对应位置交换;插入排序是将待排序数插入已排好序的数据中;快速排序是选中间值,将数组分成三部分再递归排序。
39

被折叠的 条评论
为什么被折叠?



