在分治(比如歸併排序)和二分法這種算法的時候,中位數要選擇正確,一般是start,middle,end,三個值。
sort(int[] ins,start,end){
if(start<end){
//代碼邏輯
}
}
如果選得不太正確,就會在兩個數的時候造成死循環。
規定,index是從0開始。
- 邊界值是在兩個數的時候,那麼就拿兩個數來分析吧
- 如果middle選取 (start + end)/2,那麼middle = start.這個時候應該規定遞歸的兩個子任務爲(start,middle)和(middle+1,end),否則會有邊界問題。
- 如果middle選取(start+end+1)/2.那麼middle = end.這個時候應該規定遞歸的兩個子任務爲(start,middle-1)和(middle,end),否則會有邊界問題。
所以,一般來說,middle一般見仁見智。
如果middle = (start+end)/2,那麼子任務爲start,middle和middle +1,end
如果middle = (start+end+1)/2,那麼子任務爲start,middle -1 和middle,end
如果選錯了,那麼恭喜你進入死循環…