所以我一直在努力正確實施一個快速排序算法的作業分配整晚,並在搜索了幾個小時後,我找不到任何具體實施的中位數分區。所以,我被困在一個巨大的障礙,我不知道我的算法的哪一部分是可怕的,因爲所有在線算法都是僞代碼(所以他們對分區的描述極其模糊),所以不可能我檢查我的實施。所以這裏是我的弗蘭肯斯坦的代碼在閱讀文檔之後,文檔說明了中位數的樞軸選擇如何與java中的快速排序一起工作。如何在java中找到中位數的快速排序
http://mitpress.mit.edu/algorithms/solutions/chap9-solutions.pdf:
這裏是我發現到目前爲止,甚至遠程有用的唯一來源,而且都是上使算法的工作零件痛苦含糊其辭,故意將花費這麼多時間搜索後似乎
http://www.cs.umd.edu/~meesh/351/mount/lectures/lect9-medians-selection.pdf
* HTTP://www.ics.uci.edu/~eppstein/161/960130.html
* HTTP://en.wikipedia.org/wiki/Selection_algorithm
這裏是我的快速排序算法:
{Removed Code}
這是我的選擇方法,我覺得可怕搞砸的部分是,我如何選擇中位數,中位數和中位數,但我無法在網上找到的任何東西引導我的分區:
{Removed Code}
也爲我的分區我用我的正常快速排序劃分方法,但這樣的樞軸作爲參數略有改變,我不知道是否有別的我應該這樣做,因爲網上的所有來源在這方面都是模糊的:
{Removed Code}
這裏是我的排序的5組插入排序,以防萬一:
{Removed Code}
任何深入瞭解我搞砸了算法的哪一部分會非常讚賞,因爲我一直將我的頭撞在牆上試圖找出錯誤的地方。在選擇算法中肯定存在一個巨大的錯誤,因爲我的JUnit測試對預選結果爲50的中位數的[1..100]預失敗,但我的算法總是吐出54個。
該任務是否特別要求此算法來查找中位數?對於大多數快速排序實現來說,使用第一個,中間和最後一個元素的中值就足夠了。 – Joni 2012-04-03 13:39:00