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