Estimation of Two Closely Spaced Frequencies?
This answer is a consideration of the frequency resolution when using the DFT but does not answer the question specifically in terms of what is the best algorithm. (see comments by Amro).

If the two closely spaced signals are similar in magnitude (and sufficiently stronger than any other signals, i.e. high SNR), then the highest frequency resolution (which is what you are interested in) is achieved with a rectangular window. This means simply take an FFT with no windowing, and the signal bandwidth will be 1 bin wide or similarly equal to 1/T where T is the time length of your composite signal. This relationship holds regardless of what algorithm is used; the frequency resolution is related to the time length of the signal with the best resolution of 1/T. If the two closely spaced signals are not similar in magnitude, you will run into dynamic range issues as the rectangular window has the worst sidelobe levels, which can mask lower level signals. In this case we use windowing; specifically we multiply the time series by a window function prior to taking the FFT, which will significantly reduce sidelobe levels, but will have the drawback of increasing the width of the main lobe (and hence decrease frequency resolution). 

See this answer for further related info: Specific frequency resolution