看看牛人种的火龙果!!# gardening - 拈花惹草
g*j
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;
}
,什么时候加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;
}