Zimbabwe also made the final as both they and South Africa ended with two wins and a better nett run-rate than Bangladesh, but the hosts could only post 124 for six after winning the toss and batting first, and South Africa cruised to their target in the 18th over.
Hashim Amla was out first ball, brilliantly caught down the leg side by diving wicketkeeper Brendan Taylor off Christopher Mpofu, but Richard Levi and Faf du Plessis then added 55 for the second wicket in five overs.
Although Zimbabwe were able to get Du Plessis (14) out, also caught behind as he edged a lovely Kyle Jarvis away-swinger, in the sixth over, it was Levi who was doing most of the damage.
Hitting four fours and four sixes, Levi was able to get to his half-century off just 27 balls as Zimbabwe’s lack of firepower was exposed.
Anything remotely short was severely punished by the beefy opener as he made his way to 54 off 30 balls. Levi then drove a delivery from Richard Muzhange crisply to long-off and wanted a second run, but Mpofu fired in a superb throw to Taylor to catch him well short of his ground.
But Levi’s onslaught had left South Africa needing just 37 runs off 58 balls, providing the ideal platform for fringe batsmen Justin Ontong and Farhaan Behardien to get some time out in the middle.
Ontong scored 24 off 32 balls before he provided an easy wicket for part-time off-spinner Malcolm Waller by holing out at long-off, but Behardien finished on 19 not out off 27 balls, a morale-boosting innings for the Titans star.
Albie Morkel came in and hit his second ball over midwicket for six to clinch the victory.
Captain Taylor surprisingly only turned to leg-spinner Graeme Cremer (4-0-20-0) in the eighth over and Muzhange (3-0-20-0) in the 11th over, and they were Zimbabwe’s best bowlers.
Zimbabwe had earlier paid the price for losing wickets in pairs as they struggled to 124 for six.
It was always going to be a tough total to defend and, if South Africa had cruised to victory with a handful of overs to spare, it could have cost Zimbabwe a place in Sunday’s final. South Africa, who were bottom of the standings, had to win to progress.
Zimbabwe won the toss and elected to bat first and the in-form Hamilton Masakadza got an early move on as he struck 36 runs off 30 balls.
But the non-support at the other end proved costly as Vusi Sibanda (9), Taylor (1), Waller (0) and Elton Chigumbura (5) all failed, Zimbabwe plunging to 60 for five in the 11th over.
Sibanda hit a wonderful six over backward square-leg off Lonwabo Tsotsobe in the third over, but the rest of his innings was a non-event and he was trapped lbw by Chris Morris, walking across his stumps and missing a swing to leg.
Zimbabwe ended the fifth over by losing their captain Taylor, caught off left-arm spinner Robin Peterson, and their nerves just got worse as Masakadza’s hot streak ended as he drove Wayne Parnell to extra cover, Behardien plucking a low catch off the turf in expert fashion.
Parnell, who started the tournament so disastrously, came out smoking on Saturday and once again took two wickets in an over, removing Waller two balls later, wicketkeeper Dane Vilas showing that he can pull off the tough catches as he dived low, one-handed to his right, to snap up a flatfooted drive.
Chigumbura can hit a long ball, but he managed just one four on Saturday before Parnell showed that he can bowl the unplayable delivery, getting one to just nip away from the batsman, who was on the drive to a good-length delivery, Vilas taking his second catch.
Parnell’s awesome burst of three for seven in three overs, including a double-wicket maiden, derailed the Zimbabwe innings and leg-spinner Du Plessis also bowled very well in the middle overs, conceding just 22 runs in four overs.
Stuart Matsikenyeri scored 22 to lift Zimbabwe to 92 for six, and Cremer also made valuable runs in the closing stages to lift the hosts to a competitive, if mediocre, total.
Paceman Morkel struck in his first over to have Matsikenyeri well-caught on the boundary by Du Plessis, but Zimbabwe will be grateful for Cremer, who played sensibly but struck the ball cleanly in amassing 36 not out off 27 balls, with four fours.
While Parnell won the man of the match award after finishing with three for 16, South Africa will be pleased that Morris looked the part, bowling an excellent last over to finish with one for 26 in his four overs. They will also be delighted with the work of their spinners – Du Plessis and the consistent Peterson (3-0-17-1).