php四种排序算法
冒泡排序
- 思路: 就像冒泡一样, 每次从数组里面冒出一个最大的排在最后面;
- 例如:
1,3,2 //第一次就是3
1,2,3 //第二次就是21
2
3
4
5
6
7
8
9
10
11
12
13$arr = [1,4,6,8,9,2,3,5,7,10,17,11];
function getpaopao($arr){
$len = count($arr);
for($i=1;$i<$len;$i++>){
for($k=0;$k<$len;$k++>){
if($arr[$k] > $arr[$k+1]){
$tmp = $arr[$k+1];
$arr[$k+1] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
}选择排序
- 思路: 每次选择一个元素,放在指定的位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19$arr = [1,4,6,8,9,2,3,5,7,10,17,11];
function select($arr){
$len = conut($arr);
for($i=1;$i<$len;$i++){
$p = $i;
for($j=1;$j<$len;$j++){
if($arr[$p] > $arr[$j]){
$p = $j;
}
}
if($p!=$j){
$tmp = $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return $arr;
}
var_dump(select($arr));插入排序
- 思路: 将要排序的元素插入到假定排序好的数组的指定位置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17$arr = [1,4,6,8,9,2,3,5,7,10,17,11];
function sore($arr){
$len = count($arr);
for($i=1;$i<$len;$i++){
$tmp = $arr[$i];
for($j=$i-1;$j>=0;$j--){
if($tmp < $arr[$j]){
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}else{
break;
}
}
}
reture $arr;
}
var_dump(sore($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$arr = [1,4,6,8,9,2,3,5,7,10,17,11];
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);
//将所有结果合并
reture array_merge($left,array($arr[0]),$right);
}
var_dump(quick_sort($arr));
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!