快速排序索引问题
Quicksort index issue
我正在尝试实现基本的快速排序功能。我对索引范围有点困惑
void q_sort(int * tab, int left, int right)
{
if(left < right)
{
int piv = left;
for(int i = left+1; i <= right; ++i)
if(tab[i] < tab[left])
change(tab[++piv], tab[i]);
change(tab[piv],tab[left]);
q_sort(tab, left, piv-1);
q_sort(tab, piv+1, right);
}
}
让我们取一个包含四个元素的数组。如果我用
调用functionq_sort(array, 0, 3)
似乎可以,但是如果我改变
for(int i = left+1; i < right; ++i)
和调用函数
q_sort(array, 0, 4)
不。
不是相同的范围吗?有什么意义?
由于q_sort
是递归的,因此需要在两种上下文中理解其参数的含义:
- 函数外部调用时,
- 执行递归调用。
您在外部调用q_sort(array, 0, 4)
中调整了int right
参数,将右端处理为不包含,但递归调用q_sort(tab, left, piv-1)
假设第三个参数包含。从表达式中删除-1
来解决这个问题:
q_sort(tab, left, piv); // <<== Here
q_sort(tab, piv+1, right);
相关文章:
- 按字母顺序对C++问题中的子字符串索引进行分区
- 如何解决索引和排序问题
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 如何在 for 循环中解决潜在的 getline() 问题,数组的第一个索引没有显示?
- 使用函数从数组中索引最小值的问题
- 如何使用二叉搜索树的索引生成器解决此问题
- C++动态阵列索引和容量问题
- 几对性能问题(一个较大的向量与较小的块向量),值得存储迭代索引以进行矢量访问
- 正确复制 QTableView 中的选择(模型索引问题)
- C++ 将多索引提升为 LRU 缓存的索引排序问题
- 获取索引信息的问题-SQL Server
- C++中的字符串索引问题
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 数组的索引问题
- 使用纹理,法线和索引列表从VBO绘制OpenGL对象的问题
- 索引运算符的 deques 和超出 deque 大小的问题
- C++:字符串索引和保留标点符号时出现问题
- 填充 c++ 数组时遇到问题,每个索引处只有最后一项
- 加载.dae文件时出现问题,索引和顶点加载正确
- 数组索引越界赋值的问题