Sri Lanka's hopes of reaching the World Cup semi-finals were dented as South Africa thrashed them by nine wickets at Chester-le-Street.
Victory would have taken Sri Lanka level on points with fourth-placed England, but they stay in seventh.
No player scored more than 30 as they were bowled out for a turgid 203 in the final over of their innings.
South Africa won with 76 balls to spare, with Faf du Plessis making 96 not out and Hashim Amla an unbeaten 80.
Sri Lanka remain two points behind England and it is likely they will have to win both of their remaining matches, including beating unbeaten India, and hope other results go in their favour if they are to overtake Eoin Morgan's side.
The biggest threats to England's top-four place are now likely to be Pakistan and Bangladesh, with the former playing Afghanistan on Saturday.
South Africa were already eliminated, and this was just their second victory in the competition.
Sri Lanka fluff their lines
Before their surprise win over England on Friday, few expected Sri Lanka to challenge for a semi-final place - and this performance saw them revert to their form at the start of the tournament.
They made a terrible start, losing captain Dimuth Karunaratne to the first ball of the match, before recovering to reach 67-1 in the 10th over.
Kusal Perera and Avishka Fernando both made 30, but Sri Lanka never recovered from their departures in a 10-ball spell.
Only Karunaratne, who fended an aggressive Kagiso Rabada bouncer to second slip, could claim he was dismissed by a good delivery, and the rest of the batsmen struggled to find an appropriate pace at which to bat.
There were 187 dot balls, the most in any innings in the tournament, and South Africa were always able to apply pressure.
Sri Lanka were then toothless with the ball, with the Proteas' measured approach showing their score to be well below par.
South Africa's best showing comes too late
South Africa's only other win in this tournament was a laboured nine-wicket defeat of Afghanistan, which briefly revived their hopes after beginning with four consecutive defeats.
This was a much more composed all-round display, but captain Du Plessis admitted it was "bittersweet" with his side already eliminated.
All-rounder Dwaine Pretorius, selected for the first time since the opening match, bowled accurately and was rewarded with economical figures of 3-25.
Chris Morris also took three wickets, and Rabada belatedly found some form to finish with 2-36.
When South Africa batted, opener Quinton de Kock was bowled by a perfect Lasith Malinga yorker in the fifth over, but Du Plessis and Amla saw them home.
Amla, who had scored only 123 runs in the tournament's first seven games, hit two boundaries off Malinga in the opening over, and afterwards looked far more composed.
His only moment of concern came as he was given out lbw to leg-spinner Jeevan Mendis, but a review showed the ball pitched outside leg stump.
Du Plessis was similarly unflustered, hitting nine fours and a big six. He finished on South Africa's highest individual score of the tournament, with Amla's the next best.
Sri Lanka captain Dimuth Karunaratne: "The wicket was a bit slow and South Africa bowled well, they kept it tight and kept building pressure. We couldn't get the singles so we had to keep going for the big shots.
"We needed to take wickets to stand a chance of winning and build pressure. We've got to think about that - how we can build pressure and create mistakes."
South Africa captain Faf du Plessis: "It feels like it's a long time coming - we finally did ourselves justice.
"It was set up by a very good bowling performance. We've been trying to get Dwaine into the team so badly but we couldn't find the right combination.
"It feels bittersweet, it doesn't feel like it means too much."
Source: BBC Sports