[無用] 實做 qsort
這個原本是個考題要求將 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
10/26 15:02, 1F
→
10/26 15:04, , 2F
10/26 15:04, 2F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章