Which unsupervised learning algorithm assigns each data point to the nearest cluster centroid and iteratively updates centroids until convergence?