PHP數組排序演算法小結

來源:互聯網
上載者:User
PHP中對數組的元素進行排序,這個是很經常用到的,之前的項目中也有,而且對於幾種排序我們都是用的是asort arsort 等PHP原生函數,沒有自己去實現,所以就對一下的幾個函數進行總結,這個會不斷的進行補充,自己也可以好好的複習和總結。

/* * 插入排序(一維數組) * 每次將一個待排序的資料元素,插入到前面已經排好序的數列中的適當的位置,使數列依然有序;直到待排序的資料元素全部插入完成為止。 */function insertSort($arr){    if(!is_array($arr) ||count($arr)==0){        return $arr;    }    $count =count($arr);    for($i=1;$i<$count;$i++){        if(isset($arr[$i])){       $tmp =$arr[$i];//擷取後一個元素的值       $j =$i - 1;//擷取前面的下標       while($arr[$j] >$tmp){//如果前面一個比後面一個大, 這裡是從小到大           $arr[$j+1] =$arr[$j];//把小的元素和前面的對換,直到移動到合適的位置,在移動下一個           $arr[$j] =$tmp;           $j--;        }        }    }    return $arr;}/* * 選擇排序(一維數組) * 每一趟從待排序的資料元素中選出最小(最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。 */function selectSort($arr){    if(!is_array($arr) ||count($arr) == 0)    {        return $arr;    }    $count =count($arr);    for($i=0;$i<$count;$i++){        $k =$i;        for($j=$i+1;$j<$count;$j++){      if ($arr[$k] >$arr[$j])        $k =$j;//找出最小的       if ($k !=$i){           $tmp =$arr[$i];           $arr[$i] =$arr[$k];           $arr[$k] =$tmp;          }       }    }    return $arr;} /*   * 冒泡排序(一維數組) * 兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反即進行交換,直到沒有反序的資料元素為止 */function bubbleSort($array){    $count =count($array);    if ($count <= 0) {        return false;    }    for($i=0;$i<$count;$i++){        for($j=$count-1;$j>$i;$j--){           if ($array[$j] <$array[$j-1]){//比較找到的數進行交換            $tmp =$array[$j];            $array[$j] =$array[$j-1];            $array[$j-1] =$tmp;           }        }    }    return $array;}/* * 快速排序(一維數組) * */function quickSort($array){    if (count($array) <= 1){        return $array;    }    $key =$array[0];    $left_arr =array();    $right_arr =array();    for ($i=1;$i$val)    {        $arrKey[] =$key;        $arrVal[] =$val;    }     $count =count($arrVal);    if($count)    {        //建立key的順序數組        for($key=0;$key<$count;$key++)        {            $arrKeyMap[$key] =$key;         }        //對值進行排序        for($i=0;$i<$count;$i++)        {                           for($j =$count-1;$j>$i;$j--)            {                //<從小到大排列 升降在這修改                $bol =$strOrder =='asc' ?$arrVal[$j]<$arrVal[$j-1] :$arrVal[$j]>$arrVal[$j-1];                if($bol){                    $tmp =$arrVal[$j];                    $arrVal[$j] =$arrVal[$j-1];                    $arrVal[$j-1] =$tmp;                    //值的冒泡排序,引起key的數組的互動                       $keytmp =$arrKeyMap[$j];                    $arrKeyMap[$j] =$arrKeyMap[$j-1];                    $arrKeyMap[$j-1] =$keytmp;                }            }        }        if(count($arrKeyMap))        {            foreach ($arrKeyMap as $val)            {                    $arrReturn[] =$arrKey[$val];            }        }        return $arrReturn;    }}  /**  * 使用原生的函數進行數組按照值進行排列  */function arraySortByVal($arr,$keys,$type='asc'){    $keysvalue =$new_array =array();    foreach ($arr as $k=>$v){        $keysvalue[$k] =$v[$keys];    }    if($type =='asc'){        asort($keysvalue);    }else{        arsort($keysvalue);    }    reset($keysvalue);    foreach ($keysvalue as $k=>$v){        $new_array[$k] =$arr[$k];    }    return $new_array;

對於下面的2個對於array的值進行排序的方法一個是自己實現的一個是使用了原生的PHP函數的,其實排序對於少量資料一般就單頁的資料量的資料還是可以的,如果涉及到大量的資料的排序,建議可以整合到MYSQL的基礎類中來進行。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.