我已经获得了算法的基本代码,它选择未排序数组中的第 k 个最小元素(或排序,我不确定)。通常,我们会为此使用快速选择,但我们得到了另一个选择,它被标记为“countingselect”作为函数名称。
“计数选择使用类似的方法来计数排序。列表中的项目用作计数数组的索引。然后,从数组的低值端开始,项目计数被累加,直到总数超过所需值。”
// return the kth smallest item
int countingSelect(int items[], int first, int last, int k) {
int counts[cap];
for (int c = 0; c < cap; c++) {
counts[c] = 0;
}
for (int i = first; i < last; i++) {
counts[items[i]] += 1;
}
int c = 0;
while (k >= 0) {
k -= counts[c++];
}
return c-1;
}
我在将其分解为伪代码时遇到了巨大的麻烦,以便我可以准确理解该函数的工作原理。对于我们得到的代码,我的第一个困惑是“cap”的值是什么,它的功能是什么。上限通常是什么值?我没有得到这个信息。
将算法分解为伪代码是理解它的好方法,我请求一些帮助来分解它并逐步执行代码。
先感谢您。