PHP数组 阅读 4415
PHP数组 第9章 排序

PHP数组 第9章 排序

2016-07-09 • lulubin

一、排序的两大类

https://file.lulublog.cn/images/3/2022/08/JkY8ceEKhluEhsH77EEC4EctijHkYe.png?sign=7b2ceb2450fea92a07404a7f5b20f6dc&t=6ad0f880

二、冒泡排序法

①、基本思想

https://file.lulublog.cn/images/3/2022/08/kKK601uxd6OJUzfoUfzUJjKYFuO6uI.png?sign=42df565367e475af71533a7265298629&t=6ad0f880

②、案例分析:从小到大排序

https://file.lulublog.cn/images/3/2022/08/yj3arfJVASQvBDFB3d53FZRvFsd5bV.png?sign=5222ef3593ce76fa77402585e6277460&t=6ad0f880

https://file.lulublog.cn/images/3/2022/08/AiiI2Fa20E2amgByP2PwtemMzFaA22.png?sign=8dba3bbdbccf148487b33d796e564c08&t=6ad0f880

三、选择排序法

①、基本思想

https://file.lulublog.cn/images/3/2022/08/HBghqh6QhNdC8Z8BbGNn6nND2BggS5.png?sign=e57706c8c690ea4eeb3dce8428274021&t=6ad0f880

②、案例分析:从小到大排序

https://file.lulublog.cn/images/3/2022/08/xd1Ay5skCCZA01KcD1SaSd0VsV1FaC.png?sign=b2697df7ea1dd3e54f3ed346665497db&t=6ad0f880

https://file.lulublog.cn/images/3/2022/08/wXEObBObLgfXpXG3xLCUcZCzEs5PS3.png?sign=7d202fd426c29ec1d5cd28272d80e721&t=6ad0f880

四、插入排序法

分三种:插入排序法、希尔排序法、二叉树排序法

①、基本思想

https://file.lulublog.cn/images/3/2022/08/uA1gYgB38igaG3OYZA14W3iHHw4G55.png?sign=0370299c3331b789a643e657ea21e3f0&t=6ad0f880

②、案例分析

function insertSort(&$arr)
{
    //先默认下表为0这个数已经有序
    for($i=1;$i=0 && $insertVal<$arr[$insertIndex]){
            //把较大的数后移
            $arr[$insertIndex+1] = $arr[$insertIndex];
            $insertIndex--;
        }
        //插入(这时为$indexVal找到适当的位置了)
        $arr[$insertIndex+1] = $insertVal;
    }
}

https://file.lulublog.cn/images/3/2022/08/q88zEtIZiJtjeR7izslEEJJ8Ehn8h8.png?sign=37338d03abdfcad25d881ee554a1151f&t=6ad0f880

五、快速排序法

https://file.lulublog.cn/images/3/2022/08/b32xHD9U22R9i9N79R9XhrUS3Iui2w.png?sign=a3a80bab36e79708acd9ff623b68ba2c&t=6ad0f880

https://file.lulublog.cn/images/3/2022/08/IK8IXEI3xaARbEQx8KLzeqzkkikA3g.png?sign=ad2801ffdec8d35e369041072af6c9e3&t=6ad0f880

六、总结

①、数组默认传递的是值,不是地址。如果要传递地址 ,用&

②、从效率上看:冒泡排序法 > 选择排序法 > 插入排序法

七、二维数组排序

//二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
    if (!is_array($arr)) {
    return false;
  }
  $keysvalue = array();
  foreach($arr as $key => $val) {
    $keysvalue[$key] = $val[$keys];
  }
  if($order == 0){
    asort($keysvalue);
  }else {
    arsort($keysvalue);
  }
  reset($keysvalue);
  foreach($keysvalue as $key => $vals) {
    $keysort[$key] = $key;
  }
  $new_array = array();
  foreach($keysort as $key => $val) {
    $new_array[$key] = $arr[$val];
  }
  return $new_array;
}