递归算法就是把问题拆分成更小的问题,每个小问题用同样的方式处理,当分到足够小时,就可以直接得到解,即递归的退出条件。本例中是 left==right。拆分问题,把数组分成两部分,分别处理,left和right就是分界的数组下标。初值分别是0, length-1,然后分别将left+1, right-1,可以在纸上模拟画一下,就清晰了。
int left和int right的含义是定义int类型的变量left和right,这里的作用是记录剩下部分的左边界和右边界
这是二分法递归
left和right分别表示从左端和右端取一个数
在递归算法中,使用int left和int right这两个参数是为了限定递归的范围,使递归不会无限制地进行下去,从而导致栈溢出等问题。具体地说,它们的作用是指定递归操作需要处理的数据范围,left和right分别表示待处理数据的左边界和右边界,通过不断缩小这个范围来实现递归操作的终止。在递归函数中,一般会对左右边界进行比较和更新,以确保范围的正确性。实际上,left和right还可以用来实现分治策略,通过将问题分成若干部分,在每一部分上递归调用算法,最终得到问题的解决方案。在代码中,left和right可以作为函数的参数传递,也可以定义在全局变量中。下面是在快速排序算法中使用left和right参数的示例代码:
void quick_sort(int arr[], int left, int right){
if(left >= right) return; // 递归边界
int i = left, j = right, pivot = arr[left]; // 中心点选择左边第一个元素
while(i < j){
while(i < j && arr[j] >= pivot) j--; // 从右往左找到第一个小于pivot的元素
if(i < j){
arr[i] = arr[j];
i++;
}
while(i < j && arr[i] < pivot) i++; // 从左往右找到第一个大于等于pivot的元素
if(i < j){
arr[j] = arr[i];
j--;
}
}
arr[i] = pivot; // 将pivot放到最终位置
quick_sort(arr, left, i-1); // 递归左区间
quick_sort(arr, i+1, right); // 递归右区间
}
在这个例子中,left和right参数用来表示待排序数组的左右边界,递归操作需要对这个范围内的数据进行排序。在每一轮操作中,程序会选择左边第一个元素作为中心点,然后将数组分成left~i-1和i+1~right两个区间,分别对这两个区间递归调用quick_sort函数,直到满足递归边界。