Faf du Plessis smashed a third century in four matches as South Africa beat Zimbabwe by 63 runs on Thursday to set up a final showdown with Australia in the triangular series tournament.
Zimbabwe were bowled out for 208 in reply to South Africa's imposing tally of 271 for six off their 50 overs in the last of the round-robin matches.
It was always going to be difficult for Zimbabwe, who upset Australia in their last match on Sunday, to beat South Africa and make a considerable improvement in their run rate in order to usurp their neighbours and advance to Saturday's series finale.
Zimbabwe needed to overhaul South Africa's total in just 29 overs to reach the final but fell well short despite wicket keeper Brendan Taylor amassing 79 in 96 balls.
Du Plessis, promoted up the South African batting order to three to fill a void for next year's World Cup, continued to flourish as he scored 121 after smashing five fours and four sixes in his knock.
He and JP Duminy put on a 103-run partnership for the fifth wicket to haul South Africa to a decent tally on a difficult surface with early morning turn for Zimbabwe's spin attack.
ZIMBABWE: 208 all out in 47.2 overs (Raza 29, Masakadza 26, Taylor 79, Chigumbura 13, Waller 17; Duminy 3-35)
Result: South Africa won by 63 runs.
Player-of-the-match: Faf du Plessis.