作者arrack (Arrack Tseng)
看板PHP
標題Re: [無用] 實做 qsort
時間Mon Oct 26 16:23:25 2009
※ 引述《jsu (Qu'est-ce que fuck?)》之銘言:
: 這個原本是個考題要求將 associated array 排序
: 必需要能依 value 或是 key 下去排
: 因為 qsort 易懂易寫,所以用 qsort 實做出來
: 這題在 PHP 上麻煩的東西主要在 PHP 的 function
: 很多都會把 int 的 key 重設要小心
: 也為了這個緣故,所以不是照傳統的方式以最後的值當 pivot
: 而是以 key() 隨手抓一個來用,再左右區分
: 其實題目很簡單
你用了滿多擴充的function,真正在考試的時候,那些相關的模組,是不會載入的
我拿你的範例,寫了一個,大家交流一下。
我用的是bubblesort
因應php陣列的特性,我作了一些額外的處理。
<?
$list = array('apple'=>300, 'orange'=>150, 'banana'=>100, 'mango'=>330);
function bs($array, $ob = 'value'){
if($ob!='value' && $ob!='key'){return NULL;}
$t=NULL;$t2=NULL;$i=0;
foreach($array as $k=>$v){$t[$i]['key']=$k;$t[$i]['value']=$v;$i++;}
for($i=0;$i<(count($t)-1);$i++){
for($j=$i+1;$j<count($t);$j++){
if($t[$i][$ob]>$t[$j][$ob]){$t=swap($t,$i,$j);}
}
}
foreach($t as $v){$t2[$v['key']]=$v['value'];}
return $t2;
}
function swap($a,$k1,$k2){$t=$a[$k1];$a[$k1]=$a[$k2];$a[$k2]=$t;return $a;}
var_dump(bs($list));
var_dump(bs($list,'key'));
?>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
推 Huangs:swap function 的 array 應該改成 pass by reference 10/27 03:34
→ Huangs:不然每次 swap 都要 copy array,複雜度會多一個次方 10/27 03:34
→ arrack:那時候在測試的時候,傳址傳不過去,才改這樣XD 10/27 08:17
→ arrack:後來也懶得調了 10/27 08:17
※ 編輯: arrack 來自: 61.62.160.122 (10/27 17:32)