二分法選擇中間值正確選取,避免死循環

在分治(比如歸併排序)和二分法這種算法的時候,中位數要選擇正確,一般是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
如果選錯了,那麼恭喜你進入死循環…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章