Sangakkara hit six sixes and 18 boundaries in an entertaining 136-ball innings to lift Sri Lanka to a commanding 320-5 in 50 overs. His innings was the third best ODI score by a Sri Lankan after Sanath Jayasuriya's 189 and Upul Tharanga's 174 not out.
He also beat his previous best one-day score of 138 not out against India in 2005.
The defeat was South Africa's second heaviest by runs after losing by 182 to Pakistan. It was also Sri Lanka's biggest win over South Africa.
Left-arm spinner Rangana Herath returned the best bowling figures for the hosts with 3-25 while seamer Thisara Perera got 3-31.
Opener Alviro Petersen, who top scored for South Africa with 29, shared a promising 44-run partnership with captain AB de Villiers for the third wicket but Herath struck in his third delivery, bowling de Villiers for 23. The visitors lost their remaining seven wickets for 67 runs.