php四种排序算法

冒泡排序

  • 思路: 就像冒泡一样, 每次从数组里面冒出一个最大的排在最后面;
  • 例如:

    1,3,2 //第一次就是3
    1,2,3 //第二次就是2

    1
    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 协议 ,转载请注明出处!