以下是我正在努力使用的函数,该函数定义用于基于递归操作的快速排序:
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
是用户定义的类,具有roi
类型的CvRect
的公共成员,它是OpenCV类,用于定义由(x, y, width, height)
。任何人都可以向我解释,最好举个例子,quick_sort
函数的作用是什么?非常感谢!
答案 0 :(得分:1)
按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