In this paper, we propose a heuristic algorithm which utilizes channel states for sub-carrier allocation in a multi-user OFDM system. Utility function is adopted as performance measure. The goal is to maximize the total utility summed over all users. The performance and computational complexity of our proposed algorithm are evaluated and compared with those of an algorithm presented in a recent paper. Results show that our proposed algorithm outperforms the previous one with much smaller computational complexity. We also compare the performance of our proposed algorithm with an upper bound. We found that the total utility obtained with our proposed algorithm is very close to the upper bound. The difference is no more than 4% for all the cases we studied.