c++ - 快速排序的递归代码
问题描述
下面是我正在努力解决的一个函数,它是为基于递归操作的快速排序而定义的:
void quick_sort(QVector<RoiInfo> &roi, int begin, int end)
{
int i, j;
int pivot;
RoiInfo work;
int half = (begin+end)/2;
pivot = roi[half].roi.y;
i = begin;
j = end;
//I am confused about the codes below, what kind of sorting it is to do
while( 1 )
{
while( roi[i].roi.y > pivot ){ ++i; }
while( roi[j].roi.y < pivot ){ --j; }
if( i >= j ){ break; }
work = roi[i];
roi[i] = roi[j];
roi[j] = work;
i++;
j--;
}
if( begin < i - 1 ){ quick_sort( roi, begin, i - 1 ); }
if( j + 1 < end ){ quick_sort( roi, j + 1, end ); }
}
在上面的代码中,RoiInfo
是一个用户定义的类,它有一个类型为 public 的成员roi
,CvRect
它是一个 OpenCV 类,它定义了一个由 指定的矩形(x, y, width, height)
。任何人都可以向我解释,最好举个例子,这个quick_sort
功能是怎么回事?非常感激!
解决方案
y
是按坐标排序吗?!(我无法评论。)仅在y
坐标上进行比较,显然它从上到下对矩形进行排序。
下面进行快速排序的分区。
while( roi[i].roi.y > pivot ){ ++i; }
while( roi[j].roi.y < pivot ){ --j; }
如果左侧或右侧仍有元素,我们将递归到较小的子问题。
if( begin < i - 1 ){quick_sort( roi, begin, i - 1 );} //elements to the left
if( j + 1 < end ){quick_sort( roi, j + 1, end );} //elements to the right
推荐阅读
- google-cloud-platform - 如何从我的google云平台项目中获取公网ip
- c# - 图像处理应该驻留在 DDD 应用程序的什么位置?
- jupyter-notebook - Google Colab 文档字符串工具提示无效
- c# - Visual Studio for Mac 在升级到 VS Mac 8.10 时找不到 .Net 6.0 或 .Net 5.0
- spring - 错误:运算符不存在:uuid = bigint
- google-chrome - 如何找出 Chrome 的原因:Aw, Snap
- matlab - 如何在MATLAB中将RGB矩阵转换为二进制数组
- assembly - 我应该如何在 IBM z/OS 汇编器中获取输入和打印输出?
- r - 如何在R中的关键字前后提取特定数量的字符?
- android - runZonedGuarded in flutter