C++ 快速排序参数

C++ 快速排序参数,c++,quicksort,C++,Quicksort,我正在尝试将一个快速排序片段应用到我的程序中;然而,我发现的大量教程或示例中,没有一个能用外行的术语解释我对第二个和第三个参数(通常称为左参数和右参数)所使用的内容;这些解释不够简单,我无法理解 下面是片段的逐字记录;如果有任何问题,我道歉 void quickSort(int arr[], int left, int right) { int i = left, j = right; int tmp; int pivot = arr[(left + right) /

我正在尝试将一个快速排序片段应用到我的程序中;然而,我发现的大量教程或示例中,没有一个能用外行的术语解释我对第二个和第三个参数(通常称为左参数和右参数)所使用的内容;这些解释不够简单,我无法理解

下面是片段的逐字记录;如果有任何问题,我道歉

void quickSort(int arr[], int left, int right) 
{
    int i = left, j = right;
    int tmp;
    int pivot = arr[(left + right) / 2];
      /* partition */
    while (i <= j) 
    {
        while (arr[i] < pivot)
            i++;
        while (arr[j] > pivot)
            j--;
        if (i <= j)
        {
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
    };

      /* recursion */
    if (left < j)
    quickSort(arr, left, j);

    if (i < right)
    quickSort(arr, i, right);
}
void快速排序(int-arr[],int-left,int-right)
{
int i=左,j=右;
int tmp;
int pivot=arr[(左+右)/2];
/*分割*/
而(我)
j--;

如果(ileft
right
是数组中的索引,要为当前的快速排序调用进行排序

第一次在顶层调用快速排序时,
left
right
是完整的数组。例如:

int arr[] = { 3,4,6,2,5,6,6,7,4,4,6,5,3,6,7,8,8,6,4,3 };

quicksort(arr, 0, 19);

left
right
是数组中的索引,要为当前的快速排序调用进行排序

第一次在顶层调用快速排序时,
left
right
是完整的数组。例如:

int arr[] = { 3,4,6,2,5,6,6,7,4,4,6,5,3,6,7,8,8,6,4,3 };

quicksort(arr, 0, 19);

在我回答之前有一点

while (i <= j) 
{
    while (arr[i] < pivot)
        i++;
        while (arr[j] > pivot)
            j--;
            if (i <= j) 
            {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
                i++;
                j--;
            }
};
while(i轴)
j--;

如果在我回答之前有一点

while (i <= j) 
{
    while (arr[i] < pivot)
        i++;
        while (arr[j] > pivot)
            j--;
            if (i <= j) 
            {
                tmp = arr[i];
                arr[i] = arr[j];
                arr[j] = tmp;
                i++;
                j--;
            }
};
while(i轴)
j--;

如果(i)这似乎不是QuasySt排序的正确实现。第一个问题是您的缩进与代码不匹配。修复缩进。代码对我测试的一些随机数组进行排序,因此它似乎是一个正确的实现。基本上,它在数组的中间选择一个枢轴元素,并且将所有元素都放在THA中。n轴左边的轴和大于轴右边的所有元素。然后我对轴左边的数组调用quick sort,对轴右边的数组调用quick sort。对,只是格式混乱。两个单行的缩进while循环递增和分别递减
i
j
是错误的。
i
递增,直到位置
i
处的元素大于轴,并且
j
递减,直到位置
j
小于轴。这似乎不是快速排序的正确实现。第一个问题i代码中的一些随机数组是我测试的,因此它看起来是一个正确的实现。基本上,它在数组的中间选择一个枢轴元素,并且把所有元素都比枢轴少,在枢轴的左边,所有元素都大于枢轴到TH。然后,我在数据轴左侧的数组上调用快速排序,在数据轴右侧的数组上调用快速排序。对,只是格式有点混乱。两个单行while循环的缩进分别递增和递减
I
j
,是错误的。
I
是递增的,直到位置
i
处的元素大于轴,而
j
是递减的,直到
j
处的位置小于轴。谢谢,这是一个很好的解释。我发现的解释中没有一个能清楚地消除这两个参数的歧义。谢谢,这是您刚刚做的这是一个很好的解释。我发现的解释中没有一个能清晰地消除这两个参数的歧义。