C语言快速排序中这个left和right什么意思,还有这个递归是怎么排的,这个j不会是负数吗,能不能讲讲这个代码的i,j,left和right的意义?谢谢
#include
void quick_sort(int array[], int left, int right)
{
int i = left, j = right;
int temp;
int pivot;
pivot = array[(left + right) / 2];
while (i <= j)
{
//从左到右找到大于等于基准点的元素
while (array[i] < pivot)
{
i++;
}
//从右到左找到小于等于基准点的元素
while (array[j] > pivot)
{
j--;
}
//如果i<=j,则互换元素
if (i <= j)
{
temp = array[i];
array[i] = array[j];
array[j] = temp;
i++;
j--;
}
}
if (left < j)
{
quick_sort(array, left, j);
}
if (i < right)
{
quick_sort(array, i, right);
}
}
int main(void)
{
int array[] = { 73,111,114,115,675,7643,754,7545,674,4,5,45,545 };
int i, length;
length = sizeof(array) / sizeof(array[0]);
quick_sort(array, 0, length-1);
printf("排序后的结果是:");
for(i = 0; i < length; i++)
{
printf("%d\n", array[i]);
}
printf("\n");
return 0;
}
left和right分别为从0递增的游标,以及从n-1递减的游标,排序函数不断比较两个游标作为下标的数组值。然后不断修改两个游标的位置,知道left>=right,或者排序完成为止