The 26-year-old right-hander hit an enterprising unbeaten 91 off 90 balls to help the West Indies to a fighting 230 for five before Bangladesh were bowled out for 131.
The win left the hosts with four points from six matches, and with their last match against England on Saturday, the West Indies can still finish in fifth position after failing to reach the semi-finals.
Bangladesh, who slumped to 35-5 in the 17th over, never looked like they would reach what was an achievable target as they lost wickets at regular interval.
Mashrafe Mortaza (37) and Mushfiqur Rahim (38) offered the only resistance with a defiant 58-run stand for the seventh wicket.
Bangladesh lost opener Tamim Iqbal (seven) in the seventh over, run out in a horrible mix-up before Corey Collymore dismissed Aftab Ahmed (six) and Saqibul Hasan without scoring to leave Bangladesh at 23-3.
Daren Powell then removed Mohammad Ashraful (two), Javed Omar (16) and Habibul Bahshar (12) in the space of 19 runs to finish with 3-38.
He is the best West Indian bowler with 14 wickets in the tournament.
Earlier, the West Indies fought back through Sarwan and Shivnarine Chanderpaul (50) after they lost Devon Smith (five) and Chris Gayle (one) with the score on eight.
Sarwan hit five boundaries and two towering sixes and added 81 for the fourth wicket with Chanderpaul (50) to lift the West Indies from a precarious 55-3.
Sarwan, who is tipped to take over from Brian Lara as captain, capitalised on some sloppy fielding as he and the skipper added 84 runs in the final ten slog overs.
Lara, who was playing his penultimate match after announcing he would retire from one-day cricket after the World Cup, hit a robust 27-ball 33 with two sixes and a four before he was caught off Abdur Razzak in the 47th over.
He helped Sarwan add a quickfire 60 for the fifth wicket.
But it was Bangladesh who had the upper hand at the outset.
Mortaza removed Smith in the third over, bowling the left-hander with a sharp incoming delivery before Syed Rasel, who missed Bangladesh's defeat against Ireland with a sprained ankle, trapped the out-of-form Gayle in the next over.
Gayle made only one to continue his poor run of scores, having made just 148 in seven World Cup matches.
At 15-2, Bangladesh were unlucky not to take Marlon Samuels' wicket when Hasan failed to hold a diving one-handed chance off Rasel at gully when the batsman had not scored.
Samuels (31) added 47 runs for the third wicket with Chanderpaul before left-arm spinner Hasan had him caught behind.
It was then left to Chanderpaul and Sarwan to build the innings.
Chanderpaul, who was slow at the start, reached his 46th one-day fifty off 84 deliveries. The very next ball he missed a cross batted shot and was bowled by medium pacer Ahmed. He hit three boundaries.
Bangladesh, who beat India in the first round and South Africa in the Super Eights, finished with one win in their seven Super Eights matches.