C语言快速排序中这个left和right什么意思

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,或者排序完成为止