Re: [請益] 結合排序 Merge Sort

看板PHP作者 (我不配)時間17年前 (2008/09/10 15:09), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《jkhunter (我不配)》之銘言: : 想請問大家 : 如果我要六個陣列 : 使用Mergesort來排列的話 : 要怎麼寫判斷式 : 我已經會兩個了 : 但是想不出來怎麼比較六個 : $sorted = array(); : $sorted2 = array(); : $len1 = count($t['價格']); : $len2 = count($g['價格']); : $i = $j = 0; : while ( $i < $len1 && $j < $len2 ) : { : // if they are equal is doesn't matter which goes first : if ( $t['價格'][$i] < $g['價格'][$j] ) : { array_push($sorted,$t['標題'][$i++]); : array_push($sorted2,$t['價格'][$i++]); : }else{ : array_push($sorted,$g['標題'][$j++]); : array_push($sorted2,$g['價格'][$j++]); : } : } : // which ever still has elements they are all greater : while ( $i < $len1 ) : { array_push($sorted,$t['標題'][$i++]); : array_push($sorted2,$t['價格'][$i++]); } : while ( $j < $len2 ) : { array_push($sorted,$g['標題'][$j++]); : array_push($sorted2,$g['價格'][$j++]); } 推 jimwayne123 :六個陣列各自用merge sort排序好,然後把這六個陣列 09/10 11:33 → jimwayne123 :當作是拆開後正要開始合併的資料,併成一個陣列 09/10 11:34 → jkhunter :我原本的陣列已經排序好了 是要結合一起排序 09/10 11:52 推 LPH66 :那就是六個人的排頭出來比大小 最小的出列 09/10 12:11 → LPH66 :然後那一排就換下一個出來 依此類推 09/10 12:11 → LPH66 :中間如果有一排沒了就跳過它 例如放個最大值之類的 09/10 12:12 → LPH66 :一直到最後剩一排就剩下的全趕過去 搞定 09/10 12:12 → LPH66 :至於六個排頭找最小的方法就不用多說了 XD 09/10 12:13 推 jimwayne123 :六個陣列已經排序好,那就用merge sort做merge的那段 09/10 12:54 → jimwayne123 :程式碼,把這六個陣列合併成一個陣列就好啦 09/10 12:55 請問大大們是這個意思嘛 假設 我有 A B C D E F 六個陣列  A 跟 B 比較 排序成 S1 S1 跟 C 比較 排序成 S2 S2 跟 D 比較 排序成 S3 S3 跟 E 比較 排序成 S4 S4 跟 F 比較 排序成 S5 答案就是S5 這個陣列嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.171.135.123 ※ 編輯: jkhunter 來自: 118.171.135.123 (09/10 15:09)

09/10 15:57, , 1F
以 merge sort 的順序,就小弟的印象應該是
09/10 15:57, 1F

09/10 15:57, , 2F
A跟B合併成S1,C跟D合併成S2,E放著不管
09/10 15:57, 2F

09/10 15:58, , 3F
然後S1跟S2合併成S3,S3跟E合併~就是完整排序的結果
09/10 15:58, 3F

09/10 15:59, , 4F
不過您的順序也是沒什麼差吧,總之這個問題可以直接
09/10 15:59, 4F

09/10 15:59, , 5F
套用 merge sort 的概念去解決~
09/10 15:59, 5F
文章代碼(AID): #18ntAH6P (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #18ntAH6P (PHP)