$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教程有興趣的朋友有所協助。