这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程。

充效率看

冒泡排序法<选择排序法<插入排序法 排序分两大类:

内部排序法

交换式排序法

冒泡法

基本思想:

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
//简单的
$arr=array(0,5,-1);

//现在我们把函数毛片封装成函数,利用以后使用
//数组默认传递的是值,不是地址,&是地址符
function bubble(&$myarr){
//这是一个中间变量
$temp=0;
//我们要把数组从小到大

//外层循环
for($i=0;$i<count($myarr)-1;$i++){
     for($j=0;$j<count($myarr)-1-$i;$j++){
    //说明前面的数比后面的数大,就要交换
     if($myarr[$j]>$myarr[$j+1]){
       $temp=$myarr[$j];
       $myarr[$j]=$myarr[$j+1];
       $myarr[$j+1]=$temp;
    }
  }
}
}
//使用函数去排序
bubble($arr);
//输出
print_r($arr);

分析图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法_i++_02

分析图

选择排序法

示意图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法_快速排序_03

选择排序示意图

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//选择排序法
function selectSort(&$arr){
//定义中间变量
$temp=0;

     for($i=0;$i<count($arr)-1;$i++){
      //假设$i就是最小的数
         $minVal=$arr[$i];
      //记录我认为的最小数的下标
         $minIndex=$i;
         for($j=$i+1;$j<count($arr);$j++){
      //说明我们认为的最小值,不是最小
                if($minVal>$arr[$j]){
                   $minVal=$arr[$j];
                   $minIndex=$j;
}
}
      //最后交换
      $temp=$arr[$i];
      $arr[$i]=$arr[$minIndex];
      $arr[$minIndex]=$temp;
}
}

流程图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法_快速排序_04

流程图

插入排序法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//插入排序法
function insertSort(&$arr){
//先默认下标为0,这个数已经是有序
     for($i=1;$i<count($arr);i++){
//$insertVal是准备插入的数
        $insertVal=%arr[$i];
//准备先和和$insertIndex比较
        $insertIndex=$i-1;
//如果这个条件满足,说明,我们还没有找到适当的位置
        while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
//同时把数后移
        $arr[$insertIndex+1]=$arr[$insertInde];
             $insertIndex--;
}
//插入这时就给$insertVal找的了适当位置
$arr[$insertIndex+1]=$insertVal;
}
}
php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法_快速排序_05

流程图

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
function quickSort($lefl,$right,&$array){
   $l=$lefl;
   $r=$right;
   $pivot = $array[($lefl+$right)/2];

whlie($l<$r){
    while($array[$l]<$pivot) $l++;
    while($array[$r]>$pivot) $r--; 

    if($l>=$r) break;

    $temp=$array[$l];
    $array[$l]=$array[$r];
    $array[$r]=$temp;

    if($array[$l]==$pivot) --$r;
    if($array[$r]==$pivot) ++$l;
}
    if($l==$r){
        $l++;
        $r--;
}
    if($left<$r)   quickSort($left,$r,$array);
    if($right>$l)  quickSort($l,$right,$array);
}

动态创建200000个数据

1
2
3
for($i=0;$I<200000;$i++){
    $array[$i]=rand(0,3000);
}

分析流程图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法_选择排序法_06

快速排序法

 

 

    声明:  文章内容源自互联网,分享于互联网!