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
25
26
27
28
$arr=array(7,3,8,6,4,2,9,5,1);
function quick_sort($arr)
{
//判断参数是否是一个数组
if(!is_array($arr)) return false;
//递归出口:数组长度为1,直接返回数组
$length = count($arr);
if( $length<=1) return $arr;
//数组元素有多个,则定义两个空数组
$left = $right = array();
//使用for循环进行遍历,把第一个元素当做比较的对象
for($i=1;$i<$length;$i++)
{
//判断当前元素的大小
if($arr[$i]<$arr[0]){
$left[]=$arr[$i];
}else{
$right[]=$arr[$i];
}
}
//递归调用
$left=quick_sort($left);
$right=quick_sort($right);
//将所有的结果合并
return array_merge($left,array($arr[0]),$right);
}

print_r(quick_sort($arr));

插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$arr = [7,8,5,4,9,3];
function InsertSort($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
//需要比较的数字
$tmp = $arr[$i];
//内层循环比较并插入数值
for ($j = $i-1; $j >= 0; $j--) {
if ($tmp < $arr[$j]) {
//将后边的元素与前面的元素互换
$arr[$j+1] = $arr[$j];
//将前面的数设置为 当前需要交换的数
$arr[$j] = $tmp;
}
}
}
return $arr;
}
print_r(InsertSort($arr));

冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$arr = [8,7,5,3];
//两两进行比较,大的不断向后沉淀,小的不断冒出
function BubbleSorts($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
//1,2,3
for ($j=0; $j < $count-$i; $j++) {
//0,1,2//0,1//0
if ($arr[$j] > $arr[$j+1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
return $arr;
}
print_r(BubbleSorts($arr));

选择排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//外层循环每次找出最大最小的
$arr = [8,7,5,3];
function selectSort($arr)
{
$count = count($arr);
//外层循环 0/ n-1次
for ($i = 0; $i < $count; $i++) {
//内层循环 1,2,3/
for ($j = $i+1; $j < $count; $j++) {
if ($arr[$i] > $arr[$j]) {
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
print_r(selectSort($arr));