标签:while -- dex aop i++ 冒泡排序 pre for 循环控制
使用php来实现常用三种排序方法:
冒泡、选择、插入中,最优的是插入排序,我就把插入排序的流程画下来了:
插入排序法的流程图:

插入排序的代码:
function InsertSort(&$arr){
for ($i=1;$i<count($arr);$i++){
// 带插入的值
$insertVal = $arr[$i];
// 要比较的位置下标
$insertIndex = $i -1;
while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
// 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
$arr[$insertIndex+1] = $arr[$insertIndex];
$insertIndex--;
}
// 插入insertVal
if($insertIndex+1 != $i){
$arr[$insertIndex+1] = $insertVal;
}
}
}
下面的三种排序法的代码:
1 <?php
2 /**
3 * Created by PhpStorm.
4 * User: xxx
5 * Date: 2016/10/12
6 * Time: 21:38
7 */
8 // 冒泡排序法
9 function maopao_sort(&$arr){
10 // 外循环 控制趟数 只需要count($arr)-1趟就可以完成排序
11 for($i=0;$i<count($arr)-1;$i++){
12 // 内循环控制每一趟,找出最大的那个数:ccount($arr)-1-$i
13 for($j=0;$j<count($arr)-1-$i;$j++){
14 if ($arr[$j] > $arr[$j+1]){
15 $temp = $arr[$j+1];
16 $arr[$j+1] = $arr[$j];
17 $arr[$j] = $temp;
18 }
19 }
20 }
21 }
22
23 //选择排序法
24 function SelectSort(&$arr){
25 for($i=0;$i<count($arr)-1;$i++){
26 // 假设的最小数
27 $minVal = $arr[$i];
28 //最小数的下标
29 $minIndex = $i;
30 for($j=$i+1;$j<count($arr);$j++){
31 if ($minVal>$arr[$j]){
32 $minVal = $arr[$j];
33 $minIndex = $j;
34 }
35 }
36 if ($i != $minIndex){
37 $temp = $arr[$i];
38 $arr[$i] = $minVal;
39 $arr[$minIndex] = $temp;
40 }
41 }
42 }
43
44 // 插入排序法(小-->大)
45 function InsertSort(&$arr){
46 for ($i=1;$i<count($arr);$i++){
47 // 带插入的值
48 $insertVal = $arr[$i];
49 // 要比较的位置下标
50 $insertIndex = $i -1;
51 while ($insertIndex>=0 && $insertVal<$arr[$insertIndex]){
52 // 如果被比较数的下标大于等于0;插入的值比被比较的值小,则将被比较的值想后移
53 $arr[$insertIndex+1] = $arr[$insertIndex];
54 $insertIndex--;
55 }
56 // 插入insertVal
57 if($insertIndex+1 != $i){
58 $arr[$insertIndex+1] = $insertVal;
59 }
60 }
61 }
62
63
64 $arr = array(10,2,0,-23,90,-100,400);
65 //maopao_sort($arr);
66 //SelectSort($arr);
67 InsertSort($arr);
68 echo var_dump($arr)."<br>";
69 print_r($arr);
快速排序法:
1 <?php
2 function quickSort(&$arr){
3 if(count($arr)>1){
4 $k=$arr[0];
5 $x=array();
6 $y=array();
7 $_size=count($arr);
8 for($i=1;$i<$_size;$i++){
9 if($arr[$i]<=$k){
10 $x[]=$arr[$i];
11 }elseif($arr[$i]>$k){
12 $y[]=$arr[$i];
13 }
14 }
15 $x=quickSort($x);
16 $y=quickSort($y);
17 return array_merge($x,array($k),$y);
18 }else{
19 return$arr;
20 }
21 }
22 ?>
标签:while -- dex aop i++ 冒泡排序 pre for 循环控制
原文地址:http://www.cnblogs.com/shitaotao/p/7653343.html