The cardinality-constrained mean-variance portfolio problem has garnered significant attention within contemporary finance due to its potential for achieving low risk while effectively managing transaction costs. Instead of solving this problem directly, many existing methods rely on regularization and approximation techniques, which hinder investors' ability to precisely specify a portfolio's desired cardinality level. Moreover, these approaches typically include more hyper-parameters and increase the problem's dimensionality. To address these challenges, we propose a customized penalty decomposition algorithm. We demonstrate that this algorithm not only does it converge to a local minimizer of the cardinality-constrained mean-variance portfolio problem, but is also computationally efficient. Our approach leverages a sequence of penalty subproblems, each tackled using Block Coordinate Descent (BCD). We show that the steps within BCD yield closed-form solutions, allowing us to identify a saddle point of the penalty subproblems. Finally, by applying our penalty decomposition algorithm to real-world datasets, we highlight its efficiency and its superiority over state-of-the-art methods across several performance metrics.