1樓:DarrenChan陳馳
你應該問是拿陣列寫還是單鏈表寫?要是單鏈表你還能用相向雙指標嗎?能寫出quick sort那你能寫出quick select嗎?
它們之間的時間複雜度為啥乙個是nlogn乙個是n?quick sort裡面蘊含的演算法思想是啥?這是分割槽型別的相向雙指標,用這種思想還能解什麼問題?
leetcode上奇偶分割,交錯正負數至少都用了這種思想。這種思想優勢是啥,是否能保證最少交換次數?這種演算法的限制條件是啥,要是強調維護元素相對順序還能不能用?
哪怕是演算法本身,為什麼用<=,什麼時候用=,你真的明白嗎?
2樓:Scotttttt
能,剛剛複習的時候沒看任何材料無bug寫了出來,雖然稍微有點慢。
public
class
QuickSort3Way
private
static
void
sort
(Comparable
a,intlo
,inthi)
sort(a
,lo,lt
-1);sort(a
,gt+1
,hi);}
private
static
void
swap
(Comparable
array
,inti,
intj)}
3樓:
取固定數作為基準比較好寫
試了下隨機數,除錯了好久
letgetRandomNumber
=function
(start
,end
)let
quickSort
=function
(numbers
)let
length
=numbers
.length
letqueue=[[
0,length-1
]]let
partition
=function
(pivot
,start
,end
)while
(left
&&numbers [left ]<=pivotNum)if (left if(right &&numbers [right ] )let temp =numbers [right ]numbers [right]= numbers [pivot ]numbers [pivot]= tempif( right -start >1)if(end- right >1)}while (queue .length !==0 )return numbers} 4樓:両儀 可以,首先按照定義用Haskell寫一遍: quicksort::( Orda )=>[a ]->[a ]quicksort =quicksort(x :xs)= letsmallerSorted =quicksort (filter (<=x) xs)biggerSorted =quicksort (filter (>x) xs)insmallerSorted++[ x]++biggerSorted 然後翻譯成Python或者C++什麼的: vector quickSort (vector vec) );copy_if(++ vec. begin (),vec .end (),back_inserter (right),[ pivot ](const intx)); left =quickSort (left );right =quickSort (right );out .insert (out .end (),left .begin (),left .end ()); out. push_back (pivot );out .insert (out .end (),right .begin (),right .end ()); return out; };(這裡就不generic了) 5樓:Trebor 搞一下,不搞了:UTLC,不保證正確性。 並且我發現我定義了一堆不需要的東西…… 找時間測試一下,搞成normal form,當我知乎密碼得了( 6樓:原子筆 這個演算法的標準實現其實背後可以推衍一些資訊理論結論,一些偽隨機數生成或偽隨機shuffle演算法(不要小看這幾個東西背後的科學意義),,,我就是多寫了幾遍得出來的上述靈感,值得你去每年寫幾遍,真的。 7樓: 不抖機靈,我能,用C++ 畢業前能,現在能,年紀大腦子退化以前應該都能。所有複雜度和快排相當的演算法,仔細一點都可以寫出來一遍過。記得我回答過這個問題: 為什麼說裸寫quicksort能月薪1W? 據說有兩種程式設計師,一種寫程式像做解答題,一種寫程式像做證明題。成為後一種,多練練,你也可以。 之前面試過某些公司在網上海選,演算法題很簡單那種,我都是直接在網頁文字框裡直接寫程式提交的。 8樓: 標準 APL2 寫法,不用擴充套件。R← QSORTA; P;U; E;L→ (1≤A )/BODY if null return nullR←A→ 0BODY:P ←A[? A]Random pick pivot Pick up eq, low, partU←(P
(P=A )/AL ←(P>A) /ADo QSORT and assembleR←(QSORTL) ,E,( QSORTU) 改成 APL with dfns,可以寫成 one-liner,就是只有 Dyalog 支援。 Choose pivot Selection op abstractiondfns 的 recursive call 用 Del 表示GOTO 可以改成 guard。 Concatenation rule 於是就有了Q← (( ,=S,( >S)) ?}然而不管用不用擴充套件,在 APL 裡要 sort 只要很簡單的 9樓: 誒racket涼到這個程度了嗎?(逃 (define (qsort lst) (match lst['() '()] [(cons xrest)( [qsort (filter (curry >=x) rest)]( list x) [qsort (filter (curry )])])) 10樓:刺身鹹魚 說實話我第一次寫排序寫了乙個晚上,當時也不知道看書,不知道選擇排序快速排序氣泡排序啥啥啥的!!!!!我用三個for寫了乙個晚上!!!! 11樓:zJui 大學以前可以,我相信很多oier都背過,我是每次賽前檢查機子環境的時候就是寫乙個有io讀寫的快排。 現在可能還記得大概,原理也都懂,但是寫的肯定沒背的快,可能還要試執行一兩次。 12樓:風手 這在高中的oier裡面隨便找乙個都能做到,但前提是Pascal玩家,這幾年幾乎都是c++選手了,大部分水的oier都是用的庫函式。 13樓:iEternity 來個golang版本: func qsort (data int) mid:= data[0 ]head ,tail:=0 ,len (data)- 1fori:= 1;i<= tail ;else }qsort (data [:head ])qsort (data [head+1 :])} 14樓: 用erlang,so easy,兩行解決: qsort() -> ; qsort([Pivot|T]) -> qsort([X || X <- T, X < Pivot]) ++ [Pivot] ++ qsort([X || X <- T, X >= Pivot]). 有什麼問題? 15樓: 講道理不會寫的人可以說對於演算法就是門外漢吧,只刷過題,不領略演算法設計思想的那種。 這個東西不是熟不熟的問題,關鍵是你只要真正學過(而不是背定義/實現),根本想忘都忘不了吧?而且實現起來根本沒有難度吧?就是掃瞄一遍陣列然後分治吧 void qsort (..) 這是不懂遞迴還是不會掃瞄陣列?居然這個東西還能被認為是「高階程式設計師平時不用,不熟悉底層基本演算法,所以不會快速寫出很正常」。有資格被這麼評價的起碼也得是手寫AC自動機平衡樹這種細節確實比較多一些的吧? 16樓:Patrick 估計行吧,給我兩分鐘背一背就好了 python: f = lambda ll: f([i for i in ll[1:] if i <= ll[0ll[0: 1f([i for i in ll[1:] if i > ll[0if ll else haskell: q_sortq_sort (x:xs) = q_sort[a|a<-xs, a>=x]++[x]++q_sort[a|a<-xs, a 17樓:羅宸 一次性寫出: qsort ::Ord a=>[a ]->[a ]qsort =qsort(x :xs)= qsort (filter ( xs)++x :qsort (filter (>=x) xs)確保執行正確: import Data.List (sort )import Test.Hspec import Test.QuickCheck main =hspec$do describe "qsort"$do it"works like sort" $property$\ (xs::[ Int]) ->qsort xs== sort xs加個測試結果: qsort works like sort +++OK ,passed 1000000 tests .Finished in9.5305 seconds ,used 9.5000 seconds ofCPU time 1example,0 failures What's the problem? 18樓: 不能。1.不刻意記憶,排序演算法那麼多,過一陣子不接觸就忘了哪種是快排了。 2.不敢保證自己就算知道演算法也不會出bug。 但這都是無關緊要的問題,如果真的需要寫乙個排序演算法,老碼農大多能臨時設計乙個複雜度還行的演算法出來,除錯除錯bug也就沒了,而且說不定這種演算法的思路就是快排的思路。 19樓:溫酒 菜雞:不能。 高手:能。 大師:我們高階程式設計師對這些基礎的演算法都不大行的。 法爾廷斯:你想知道的東西在《演算法導論》裡面的第x頁,和第y頁,自己去看。 20樓: const qsort=xs =>xs. length ===0?xs :[... qsort(xs .filter(x =>x 0])),...xs. filter(x =>x===xs[ 0]),... qsort(xs .filter(x =>x>xs[ 0]))]; 不能喝奶茶呀 可以。醫用口罩和n95有人做資料測試防護飛沫能力相當,日常使用足夠。n95與醫用口罩的區別在於防護效果更好。1是更嚴絲合縫,貼合肌膚 2是防血液噴濺,醫護人員用n95來做手術,可以防止血液噴濺 醫用口罩做不到這點防護 SARS的第乙個患者在醫生搶救的時候咳血滲透後醫生感染 淺顯之見。 ... 橋色夫 喬斯達 我本來以為是現實中100殭屍,已經腦補了很多簡單又實用的陷阱。點進來看才知道是mc。題主怕是雲玩家,至少你得給個封閉空間的大小,mc中玩家的跑動速度比殭屍要快很多,這就留了很多的操作空間,但要是你空間太小也沒辦法跑啊。還有版本沒有規定,1.9之後有攻擊CD了,戰鬥方式有明顯變化,先不... 心蓮 跑得了和尚跑不了廟,有問題要面對和解決,而不是用死逃避,活著解決不了的問題,死了問題更大。好比抑鬱的人想用自殺解脫抑鬱,欠了債的人想躲起來逃避追債,實際上是不可能的,這輩子欠人一粒公尺,下輩子很可能要還一斗,因為又產生了利息。所以有句話叫出來混,欠了的總要還,今生不還,下輩子也要還。精神上的痛...
醫用一次性口罩能夠應對新型冠狀病毒嗎?
你一次性打100個殭屍能活多久?
一次性吃了74片藥我能不能夠死掉?