g***j 发帖数: 1275 | 1 各位大侠,我在写程序的时候,特别是二分程序的时候,经常不知道边界什么时候减1
,什么时候加1,什么时候就用求出来的mid
比如如下的code,我开始就搞错了,把第一个merge_sort的重点弄的mid-1,第二个弄
的mid,然后merge里面写的mid-1,发现不work,调试了才知道错了。
理论上来说,这个边界的起始应该不是问题啊,为什么差一个就不work呢
请问,在处理类似,先求mid,然后二分的时候,有什么诀窍呢?
int merge_sort(int array[], int start, int end){
if(start < end) {
int mid = (start + end)/2;
merge_sort(array, start, mid); // shound't be mid -1 !!!!
merge_sort(array, mid+1, end);
merge(array, start, mid, end);
}
return 0;
} | k********4 发帖数: 858 | 2 递归到长度只有1的数组的话mid-1就是负数了。。。
==============
准确地讲mid-1就比start还小了 | g***j 发帖数: 1275 | 3 这么说不减1 一定保险了?
在哪种情况下减1才是必须的呢?
【在 k********4 的大作中提到】 : 递归到长度只有1的数组的话mid-1就是负数了。。。 : ============== : 准确地讲mid-1就比start还小了
| k********4 发帖数: 858 | 4 应该具体情况具体分析,两分的时候算清楚中点的index到底是哪个,不难
【在 g***j 的大作中提到】 : 这么说不减1 一定保险了? : 在哪种情况下减1才是必须的呢?
|
|