A belligerent half-century by Kevin Pietersen set England on the way to a good total of 168 for seven.
Then spinners Graeme Swann (3-24) and Michael Yardy (2-31) showed their worth as South Africa were bowled out for 129.
The victory means England have a maximum four points ahead of their final Group E game against New Zealand on Monday.
New Zealand and South Africa have two points while Pakistan are without a win from two matches.
Pietersen will miss the game with New Zealand as he flies home to be with his wife for the birth of their first child but he is expected to return for the semi-final game.
England will be hoping there are no volcano eruptions in Iceland to stop Pietersen’s return next week after he showed once again the qualities he brings to the side.
Strutting at the crease, his body language sent a clear message to the South African bowlers that he was not going to be forced on to the back foot.
“When you see the lads going out to bat with that kind of intent, it’s really exciting. Our line-up has got a lot of potential,” said captain Paul Collingwood.
After England lost Michael Lumb early, Pietersen joined Craig Kieswetter and the pair looked up for the battle against the country of their birth.
There was some good fortune for the nationality-swapping pair however – Kieswetter was caught off a no ball by Morne Morkel and two balls later Pietersen edged a clear chance between keeper Mark Boucher and first slip Jacques Kallis.
But having offered South Africa a chance to see the back of them, the England batsmen punished them without mercy.
Pietersen (53 in 33 balls) and Kieswetter smashed 94 for the second wicket before the former was dismissed in the 12th over.
When Kieswetter also went two overs later for 41, England lost their momentum somewhat and would have been disappointed they did not go on to make an even bigger score.
But the total was too much for a South African top order that simply never got into top gear.
Pietersen took a simple catch at mid-on to get rid of Kallis off the bowling of Stuart Broad and then Yardy picked up the prize wicket of Herschelle Gibbs — Ryan Sidebottom making a fine catch at short leg.
When Proteas skipper Graeme Smith holed out to Lumb on the midwicket boundary off Swann, South Africa were 44 for three in the eighth over and in trouble they never recovered from.
“They were far better than us today,” said Smith.
“We fought back well, but our first 10 overs were poor. Consistency has been our problem of late in the shorter form of the game,” he said.