我一直在阅读各种教程和文章,讨论快速排序和快速选择算法,但是我的理解仍然不够稳固。
鉴于这个代码结构,我需要能够掌握并解释快速选择算法的工作原理。
// 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];
}
}
我需要一些帮助来拆解伪代码,虽然我没有提供分区函数的代码,但我想了解在提供的快速选择函数下它会做什么。我知道快速排序是如何工作的,但不知道快速选择。我刚才提供的代码是一个我们得到的格式化快速选择的例子。
编辑:更正后的代码为
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
}
}