二分法选择中间值正确选取,避免死循环

在分治(比如归并排序)和二分法这种算法的时候,中位数要选择正确,一般是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
如果选错了,那么恭喜你进入死循环…

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