快速排序参数
Quick sort parameters
我正在尝试将QuickSort片段应用于我的程序;但是,我发现的大量教程或示例都没有用外行的术语来解释我在第二个和第三个参数中使用的内容,最常见于左右参数;这些解释的用语不足以让我理解。
逐字段落;如果有任何问题,我深表歉意。
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);
}
我知道第一个参数是要排序的数组,但是关于该数组的确切是什么,我传递给"左"answers"对?"
我已经编码了几年,但是我没有最好的指导,因此,如果对您进行补救,请对我进行教育。
left
和 right
是索引中的数组,以分类用于QuickSort调用的当前调用。
首次在顶级拨打QuickSort时,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--;
}
};
您的代码的这一部分具有一个WILE循环,该循环被错误地缩进,因此有点混乱。
因此,左侧和右边是您所需数组的左右索引。
假设我们有一个数组
[1, 4, 5, 6, 3]
快速排序的分类部分将将数组安排到
[1, 4, 3, 6, 5]
发生的事情是您会有递归电话
quickSort(arr, 0, 2)
quickSort(arr, 3, 4)
因此,一个QuickSort将根据左侧(索引0)对右(索引2)进行排序,而另一个将在右侧(索引3)(索引4)(索引4)上的QuickSort底座对其进行排序,直到数组达到长度&lt&lt;1
相关文章:
- 如何修复我的快速排序实现?
- C++运行时错误与快速排序算法抛出堆栈转储错误
- 在 MIPS 中快速排序
- 不正确的比较和交换计数器输出用于快速排序功能
- 使用 std::vector C++快速排序,EXC_BAD_ACCESS代码 2
- 使用快速排序对 C++ 中的可视化工具错误进行排序
- 快速排序 - 三个中位数枢轴选择 - 某些元素顺序不正确
- 并行快速排序分区中的隔离错误
- 实现 3 路分区以实现快速排序
- 为什么这个快速排序实现给出了一个奇怪的输出
- 我的快速排序在对预排序的项目进行排序时失败,如何改进?
- 快速排序不适用于大型数组
- 快速排序;分段错误,但找不到位置?
- 快速排序函数在快速排序算法中如何工作?
- 3路随机快速排序分区功能
- C++17.处理使用 auto 相关的模板参数.代码排序困难
- 在最坏的情况下试验快速排序.它运行良好,但在最坏的情况下发生未知错误.我想
- C++一个具有 2 个参数(___ _____,整数长度)的函数中的快速排序
- 快速排序参数
- 快速排序函数C++ 1 个参数 - 向量