[無用] 實做 qsort

看板PHP作者 (Qu'est-ce que fuck?)時間16年前 (2009/10/26 14:35), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串1/2 (看更多)
這個原本是個考題要求將 associated array 排序 必需要能依 value 或是 key 下去排 因為 qsort 易懂易寫,所以用 qsort 實做出來 這題在 PHP 上麻煩的東西主要在 PHP 的 function 很多都會把 int 的 key 重設要小心 也為了這個緣故,所以不是照傳統的方式以最後的值當 pivot 而是以 key() 隨手抓一個來用,再左右區分 其實題目很簡單 <?php $list = array('apple'=>300, 'orange'=>150, 'banana'=>100, 'mango'=>330); var_dump($list); function quick_sort($array, $order_by = 'value') { if($order_by === 'key') return array_flip(_quick_sort(array_flip($array))); return _quick_sort($array); } function _quick_sort($array) { if(count($array) <= 1) return $array; $pivot_key = key($array); $pivot = $array[$pivot_key]; $array_keys = array_keys($array); array_shift($array_keys); array_shift($array); $array = array_combine($array_keys, $array); $greater = array(); $less = array(); foreach($array as $key => $value) { $goto = $value > $pivot ? 'greater' : 'less'; $$goto += array($key => $value); } return _quick_sort($less) + array($pivot_key => $pivot) + _quick_sort($greater); } var_dump(quick_sort($list)); var_dump(quick_sort($list, 'key')); ?> -- 乘長風,破巨浪 我海軍勇向前航 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.11.143.143 ※ 編輯: jsu 來自: 124.11.143.143 (10/26 14:52)

10/26 15:02, , 1F
為什麼不直接用內建的 usort 呢? QQ
10/26 15:02, 1F

10/26 15:04, , 2F
因為是試題,不得使用內建排序,usort 我也不熟
10/26 15:04, 2F
文章代碼(AID): #1AvKCUVj (PHP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
1
2
文章代碼(AID): #1AvKCUVj (PHP)