2013-02-06 67 views
-1
int choose_pivot(int lo, int hi){ 
    int mid = ((hi-lo)/2)+1; 
    if((arr[hi]<arr[lo])^(arr[hi]<arr[mid])){ 
     return hi; 
    } 
    else if((arr[lo]<arr[hi])^(arr[lo]<arr[mid])){ 
     return lo; 
    } 
    else{ 
     return mid; 
    } 
} 

該函數應該按如下方式選擇樞軸。考慮給定數組的第一個,中間和最後一個元素。 (如果數組有奇數長度,應該清楚「中間」元素是什麼;對於長度爲2k的數組,請使用第k個元素作爲「中間」元素,確定這三個元素中的哪一個是中值。它的價值。功能選擇快速排序的樞軸

有什麼不對這個功能可能不讓它做這是什麼意思呢?我錯過了函數不給期望的結果一些情況?

+0

那麼你的問題是什麼? –

+0

這個功能有什麼問題,它不應該做它想做的事情? – illumiNatISt

+0

'arr [mid] cyon

回答

1

如果你正試圖從coursera.org解決的任務,你需要使用

int mid = ((hi-lo)/2); 
+0

仍然沒有得到正確的答案:(不知道有什麼不對嗎?上述函數是否修改(mid =((hi-lo)/ 2);是否選擇右鍵? – illumiNatISt

+0

if hi = 1999 and lo = 0:res =(1999/2)= 999. 999左轉,因爲我們從0開始。 – Unick

0
  1. 你應該使用!=而不是^來比較布爾結果的不等式。

  2. 根據文字描述,您應該返回arr[hi]而不是hi(以及類似的mid,lo)。

1

有一兩件事,我會考慮一個致命的錯誤:有 與問候預先沒有文檔-條件。特別是, 打電話給lo == hi合法與否。 (如果它是合法的, 代碼有未定義的行爲。)lohi 代表什麼?在通常的C++約定下,我發現工作 非常好,lo將包含在內,並且hi排除。但 再次,你不告訴我們,儘管知道我們是否要判斷代碼的正確性是重要的 。 (該 事實,你arr[hi]讓我覺得,你已經通過了 做的有點不尋常慣例兩端的包容性。)

沒有這樣的信息,這是不可能做任何事情,但 使文體意見(如使用!=而不是^對於 比較結果,使用return?:而不是if ... else if ... else等)。

+0

hi和lo都包含在內。 – illumiNatISt