void topK::buildHeap(vector<int> input, vector<int>& heap, int k)
{
for (int i = 0; i < k; i++)
heap.push_back(input[i]);
for (int i = k - 1; i >= 0; i--)
shiftHeap(heap, i);
}
void topK::shiftHeap(vector<int>& heap, int i)
{
int size = heap.size();
int largest = i;
int lson = 2 * i + 1;
int rson = 2 * i + 2;
if (lson< size && heap[largest]<heap[lson])
largest = lson;
if (rson<size && heap[largest]<heap[rson])
largest = rson;
if (largest != i)
{
int temp = heap[largest];
heap[largest] = heap[i];
heap[i] = temp;
shiftHeap(heap, largest);
}
}
int topK::quickSort(vector<int>& input, int start, int end)
{
int left = start;
int right = end;
int temp = input[start];
while (left < right)
{
while (left < right && input[right] >= temp)
right--;
input[left] = input[right];
while (left < right && input[left] <= temp)
left++;
input[right] = input[left];
}
input[left] = temp;
return left;
}
vector<int> topK::getSort(vector<int> input, int pos)
{
int left = 0;
int right = input.size() - 1;
int get_pos = quickSort(input, left, right);
vector<int> result;
while (get_pos+1 != pos )
{
if (get_pos+1 > pos)
{
right = get_pos-1;
get_pos = quickSort(input, left, right);
}
else
{
left = get_pos+1;
get_pos = quickSort(input, left, right);
}
}
for (int i = 0; i < pos; i++)
{
result.push_back(input[i]);
}
return result;
}
c++随手笔记(十六)TopK算法
最新推荐文章于 2024-05-15 17:06:22 发布