亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Quicksort:選擇樞軸

Quicksort:選擇樞軸

Quicksort:選擇樞軸實現Quicksort時,您需要做的一件事就是選擇一個數據透視表。但是當我看下面的偽代碼時,我不知道應該如何選擇樞軸。列表的第一個要素?別的什么? function quicksort(array)      var list less, greater      if length(array) ≤ 1            return array        select and remove a pivot value pivot from array      for each x in array          if x ≤ pivot then append x to less          else append x to greater      return concatenate(quicksort(less), pivot, quicksort(greater))有人可以幫助我掌握選擇樞軸的概念,以及不同的場景是否需要不同的策略。
查看完整描述

3 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

選擇隨機數據會最大限度地減少您遇到最壞情況O(n 2)性能的可能性(總是選擇第一個或最后一個會導致近似排序或接近反向排序的數據的最壞情況性能)。在大多數情況下,選擇中間元素也是可以接受的。

此外,如果您自己實現此功能,則有一些算法的版本可以就地工作(即不創建兩個新列表然后連接它們)。


查看完整回答
反對 回復 2019-07-30
?
慕斯709654

TA貢獻1840條經驗 獲得超5個贊

嘿,我剛剛教過這堂課。

有幾種選擇。
簡單:選擇范圍的第一個或最后一個元素。(部分排序輸入不好)更好:選擇范圍中間的項目。(部分排序輸入更好)

但是,選擇任意元素會冒大規模將n數組分成兩個大小為1和n-1的數組的風險。如果你經常這樣做,你的快速排序可能會成為O(n ^ 2)。

我看到的一個改進是選擇中位數(第一,最后,中期); 在最壞的情況下,它仍然可以轉到O(n ^ 2),但概率上,這是一種罕見的情況。

對于大多數數據,選擇第一個或最后一個就足夠了。但是,如果您發現經常遇到最壞情況(部分排序輸入),則第一個選擇是選擇中心值(對于部分排序的數據,這是一個統計上很好的支點)。

如果您仍然遇到問題,那么請走中間路線。


查看完整回答
反對 回復 2019-07-30
  • 3 回答
  • 0 關注
  • 721 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號