PHP排序實現

來源:互聯網
上載者:User
 $tmp) { //如果前面一個比後面一個大, 這裡是從小到大016                $arr[$j + 1] = $arr[$j]; //把小的元素和前面的對換,直到移動到合適的位置,在移動下一個017                $arr[$j] = $tmp;018                $j--;019            }020        }021    }022    return $arr;023}024 025/**026 * 選擇排序(一維數組)027 * 每一趟從待排序的資料元素中選出最小(最大)的一個元素,順序放在已排好序的數列的最後,直到全部待排序的資料元素排完。028 */029function selectSort($arr) {030    if (!is_array($arr) || count($arr) == 0) {031        return $arr;032    }033    $count = count($arr);034    for ($i = 0; $i < $count; $i++) {035        $k = $i;036        for ($j = $i + 1; $j < $count; $j++) {037            if ($arr[$k] > $arr[$j])038                $k = $j; //找出最小的039            if ($k != $i) {040                $tmp = $arr[$i];041                $arr[$i] = $arr[$k];042                $arr[$k] = $tmp;043            }044        }045    }046    return $arr;047}048 049/**050 * 冒泡排序(一維數組)051 * 兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反即進行交換,直到沒有反序的資料元素為止052 */053function bubbleSort($array) {054    $count = count($array);055    if ($count <= 0) {056        return false;057    }058    for ($i = 0; $i < $count; $i++) {059        for ($j = $count - 1; $j > $i; $j--) {060            if ($array[$j] < $array[$j - 1]) { //比較找到的數進行交換061                $tmp = $array[$j];062                $array[$j] = $array[$j - 1];063                $array[$j - 1] = $tmp;064            }065        }066    }067    return $array;068}069 070/**071 * 快速排序(一維數組)072 */073function quickSort($array) {074    if (count($array) <= 1) {075        return $array;076    }077    $key = $array[0];078    $left_arr = array();079    $right_arr = array();080    for ($i = 1; $i < count($array); $i++) {081        if ($array[$i] <= $key) {082            $left_arr[] = $array[$i];083        } else {084            $right_arr[] = $array[$i];085        }086    }087    $left_arr = quickSort($left_arr);088    $right_arr = quickSort($right_arr);089    return array_merge($left_arr, array(090            $key091    ), $right_arr);092}093 094/**095 * 按照元素的值進行排序096 * strOrder 為排列的順序 asc 升序 desc 降序097 */098function sortByVal($arr, $strOrder = 'asc') {099    if (!is_array($arr) || count($arr) == 0) {100        return $arr;101    }102 103    $arrReturn = array();104    foreach ($arr as $key => $val) {105        $arrKey[] = $key;106        $arrVal[] = $val;107    }108 109    $count = count($arrVal);110    if ($count) {111        //建立key的順序數組112        for ($key = 0; $key < $count; $key++) {113            $arrKeyMap[$key] = $key;114        }115        //對值進行排序116        for ($i = 0; $i < $count; $i++) {117 118            for ($j = $count - 1; $j > $i; $j--) {119                //<從小到大排列 升降在這修改120                $bol = $strOrder == 'asc' ? $arrVal[$j] < $arrVal[$j - 1] : $arrVal[$j] > $arrVal[$j - 1];121                if ($bol) {122                    $tmp = $arrVal[$j];123                    $arrVal[$j] = $arrVal[$j - 1];124                    $arrVal[$j - 1] = $tmp;125                    //值的冒泡排序,引起key的數組的互動126                    $keytmp = $arrKeyMap[$j];127                    $arrKeyMap[$j] = $arrKeyMap[$j - 1];128                    $arrKeyMap[$j - 1] = $keytmp;129                }130            }131        }132        if (count($arrKeyMap)) {133            foreach ($arrKeyMap as $val) {134                $arrReturn[] = $arrKey[$val];135            }136        }137        return $arrReturn;138    }139}140 141/**142 * 使用原生的函數進行數組按照值進行排列143 */144function arraySortByVal($arr, $keys, $type = 'asc') {145    $keysvalue = $new_array = array();146    foreach ($arr as $k => $v) {147        $keysvalue[$k] = $v[$keys];148    }149    if ($type == 'asc') {150        asort($keysvalue);151    } else {152        arsort($keysvalue);153    }154    reset($keysvalue);155    foreach ($keysvalue as $k => $v) {156        $new_array[$k] = $arr[$k];157    }158    return $new_array;159}

j

以上就介紹了PHP排序實現,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.