php冒泡排序与快速排序算法
$a
=
array
(
'3'
,
'8'
,
'1'
,
'4'
,
'11'
,
'7'
);
print_r(
$a
);
$len
=
count
(
$a
);
//从小到大
for
(
$i
=1;
$i
<
$len
;
$i
++)
{
for
(
$j
=
$len
-1;
$j
>=
$i
;
$j
--)
if
(
$a
[
$j
]<
$a
[
$j
-1])
{
//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
$x
=
$a
[
$j
];
$a
[
$j
]=
$a
[
$j
-1];
$a
[
$j
-1]=
$x
;
}
}
print_r(
$a
);j
//另一种方法 从小到大
$b
=
array
(
'4'
,
'3'
,
'8'
,
'9'
,
'2'
,
'1'
);
$len
=
count
(
$b
);
for
(
$k
=1;
$k
<
$len
;
$k
++)
{
for
(
$j
=
$len
-1,
$i
=0;
$i
<
$len
-
$k
;
$i
++,
$j
--)
if
(
$b
[
$j
]<
$b
[
$j
-1]){
//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
$tmp
=
$b
[
$j
];
$b
[
$j
]=
$b
[
$j
-1];
$b
[
$j
-1]=
$tmp
;
}
print_r(
$b
);
echo
"
";
}
//下面的这个执行效率更高
function
maopao(
$arr
)
{
$len
=
count
(
$arr
);
for
(
$i
=1;
$i
<
$len
;
$i
++)
//最多做n-1趟排序
{
$flag
= false;
//本趟排序开始前,交换标志应为假
for
(
$j
=
$len
-1;
$j
>=
$i
;
$j
--)
{
if
(
$arr
[
$j
]<
$arr
[
$j
-1])
//交换记录
{
//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
$x
=
$arr
[
$j
];
$arr
[
$j
]=
$arr
[
$j
-1];
$arr
[
$j
-1]=
$x
;
$flag
= true;
//发生了交换,故将交换标志置为真
}
}
if
(!
$flag
)
//本趟排序未发生交换,提前终止算法
return
$arr
;
}
}
$shuz
=
array
(
'2'
,
'4'
,
'1'
,
'8'
,
'5'
);
$bb
= maopao(
$shuz
);
print_r(
$bb
);
// 快速排序
function
kuaisu(
$arr
){
$len
=
count
(
$arr
);
if
(
$len
<= 1){
return
$arr
;
}
$key
=
$arr
[0];
$left_arr
=
array
();
$right_arr
=
array
();
for
(
$i
=1;
$i
<
$len
;
$i
++){
if
(
$arr
[
$i
] <=
$key
){
$left_arr
[] =
$arr
[
$i
];
}
else
{
$right_arr
[] =
$arr
[
$i
];
}
}
$left_arr
= kuaisu(
$left_arr
);
$right_arr
= kuaisu(
$right_arr
);
return
array_merge
(
$left_arr
,
array
(
$key
),
$right_arr
);
}
$arr
=
array
(23,98,54,2,9,62,34);
print_r(kuaisu(
$arr
));