function [idx, dst] = knnsearch2(C, Q, k)
% C:   Is a MxD matrix (Corpus)
% Q:   Is a NxD matrix (Query)
% k:   The number of nearest neighbors needded
% idx: Is the Nxk matrix with the k indexes of the C points, that are
%      neighbors of the nth point of Q
% dst: Is the Nxk matrix with the k distances to the C points of the nth
%      point of Q
%
    % Calculate the distance matrix between C and Q
    % D is an m x n matrix where each element D(i, j) is the distance 
    % between the i-th point in C and the j-th point in Q.
    % k is the number of nearest neighbors to find.
    D = dist2(C, Q);

    % Find the k-nearest neighbors for each query point in Q
    % [~,n] = size(D);
    % for j = 1:n        
    %    [dst(:, j), idx(:, j)] = mink(D(:, j), k);
    % end
    [dst, idx] = mink(D, k, 1);  % mink along dimension 1 for each query point
    
    % Transpose the output to match the knnsearch format
    idx = idx';  % Make idx an n x k matrix
    dst = dst';  % Make dst an n x k matrix

end

