Re: [無用] 實做 qsort

看板PHP作者 (Arrack Tseng)時間16年前 (2009/10/26 16:23), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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)

10/27 03:34, , 1F
swap function 的 array 應該改成 pass by reference
10/27 03:34, 1F

10/27 03:34, , 2F
不然每次 swap 都要 copy array,複雜度會多一個次方
10/27 03:34, 2F

10/27 08:17, , 3F
那時候在測試的時候,傳址傳不過去,才改這樣XD
10/27 08:17, 3F

10/27 08:17, , 4F
後來也懶得調了
10/27 08:17, 4F
※ 編輯: arrack 來自: 61.62.160.122 (10/27 17:32)
文章代碼(AID): #1AvLo0At (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
1
2
完整討論串 (本文為第 2 之 2 篇):
1
2
文章代碼(AID): #1AvLo0At (PHP)