我一直在研究讨论快速排序和快速选择的各种教程和文章,但是我对它们的理解依然不稳定。QuickSelect算法了解
鉴于此代码结构,我需要能够掌握和解释quickselect的工作原理。
// return the kth smallest item
int quickSelect(int items[], int first, int last, int k) {
int pivot = partition(items, first, last);
if (k < pivot-first) {
return quickSelect(items, first, pivot, k);
} else if (k > pivot) {
return quickSelect(items, pivot+1, last, k-pivot);
} else {
return items[k];
}
}
我需要分解成伪码一点点帮助,虽然我还没有具备分区功能代码,我想了解它会做给提供的quickselect功能。
我知道quicksort是如何工作的,只是没有快速选择。我刚刚提供的代码是我们给出的关于如何格式化快速选择的示例。
编辑:纠正代码
int quickSelect(int items[], int first, int last, int k)
{
int pivot = partition(items, first, last);
if (k < pivot-first+1)
{ //boundary was wrong
return quickSelect(items, first, pivot, k);
}
else if (k > pivot-first+1)
{//boundary was wrong
return quickSelect(items, pivot+1, last, k-pivot);
}
else
{
return items[pivot];//index was wrong
}
}
Courtesty:@Haitao
我可能是太特定与我的需求 - quickselect的一般理解是什么会帮助最大,我的代码提供是它的一个例子。 – Edge
来自麻省理工学院的信息是在排序,而不是选择。据我所见。 – Edge
为什么我们需要这些:pivot-first + 1和k-pivot –