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

PHP数组 第9章 排序

2016-07-09 • lulubin

一、排序的两大类

https://file.lulublog.cn/images/3/2022/08/JkY8ceEKhluEhsH77EEC4EctijHkYe.png?sign=bd4b7e79cc2e348e7246b9f54374e160&t=6af33f80

二、冒泡排序法

①、基本思想

https://file.lulublog.cn/images/3/2022/08/kKK601uxd6OJUzfoUfzUJjKYFuO6uI.png?sign=69d03ab1c712630294be64e1e7e2db9f&t=6af33f80

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

https://file.lulublog.cn/images/3/2022/08/yj3arfJVASQvBDFB3d53FZRvFsd5bV.png?sign=a8d34e7cb1d41726c7bc0ca618a52901&t=6af33f80

https://file.lulublog.cn/images/3/2022/08/AiiI2Fa20E2amgByP2PwtemMzFaA22.png?sign=ffc82862d18b4c935b1f4d3541f1b992&t=6af33f80

三、选择排序法

①、基本思想

https://file.lulublog.cn/images/3/2022/08/HBghqh6QhNdC8Z8BbGNn6nND2BggS5.png?sign=950257f4839bdc9c9f3b25d2017c4493&t=6af33f80

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

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

https://file.lulublog.cn/images/3/2022/08/wXEObBObLgfXpXG3xLCUcZCzEs5PS3.png?sign=094f85cb332e9ad364bea4c8224964cb&t=6af33f80

四、插入排序法

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

①、基本思想

https://file.lulublog.cn/images/3/2022/08/uA1gYgB38igaG3OYZA14W3iHHw4G55.png?sign=80636edd5c67c48b6e9bb4d9ae149a4c&t=6af33f80

②、案例分析

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=eef9b4a0218a5ed0730c01ed7b7d5ca4&t=6af33f80

五、快速排序法

https://file.lulublog.cn/images/3/2022/08/b32xHD9U22R9i9N79R9XhrUS3Iui2w.png?sign=32ef6c009a669743953d0ef367eaac33&t=6af33f80

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

六、总结

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

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

七、二维数组排序

//二维数组排序, $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;
}