The Russian fifth seed was facing Halep for the first time since edging her in a three-set classic at Roland Garros, and the second clash was similarly thrilling with Sharapova prevailing 3-6 6-4 6-4 in Cincinnati.
Halep, the Romanian second seed, won a break-riddled opening set, with only one hold of serve in nine games.
Sharapova was on the canvas when Halep leapt to a 2-0 lead, however the diminutive baseliner would lose her own serve three times in succession as the four-time major winner squared the match at one-set all.
Similarly in the deciding set, Halep assumed the ascendancy with an early break, but Sharapova broke straight back in the third game.
Serving at 4-4, Halep was broken to 15 before Sharapova served it out successfully to end the contest after two hours 32 minutes.
Sharapova will face ninth-seeded Serbian Ana Ivanovic in the last four, after Ivanovic disposed of Ukraine's Elina Svitolina 6-2 6-3 at the WTA Premier event.
Ivanovic broke the Svitolina serve four times in the opening set, before requiring the lone break in the second to wrap up victory in just under an hour.
Top seed Williams will go head-to-head with former world number one Caroline Wozniacki in the other semi-final, for the pair's second meeting in as many tournaments.
American Williams, the incumbent world number one, thrashed Serbia's ninth seed Jelena Jankovic 6-1 6-3.
Williams won 23 of 25 points on her first serve, and cantered to the finish line in 58 minutes.
Danish 12th seed Wozniacki preserved her formline, downing Polish fourth seed Agnieszka Radwanska 6-4 7-6 (7-5).
Williams is the only player to beat Wozniacki in the latter's past 13 matches.