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
处的位置小于轴。谢谢,这是一个很好的解释。我发现的解释中没有一个能清楚地消除这两个参数的歧义。谢谢,这是您刚刚做的这是一个很好的解释。我发现的解释中没有一个能清晰地消除这两个参数的歧义。