Vettel briefly challenged Alonso for second with 10 laps to go but it didn't make sense for him to take any risks knowing he had the championship wrapped up with a third-place finish. He finished 2.006 seconds behind Button.
Vettel and Button nearly collided on the run to the first corner. Vettel got a slightly tardy start and cut hard to his right to block Button, who was forced to slow and put wheels on the grass verge to avoid contact.
Button could be heard over his team radio saying "He's (Vettel) got to get a penalty for that'' but stewards reviewed the footage and elected not to punish the Red Bull driver.
After the race, as the top three drivers prepared to walk out on the podium, Button asked Vettel "Didn't you see me at the start'' and Vettel said he was within his rights to defend his position because he was ahead, not alongside.
Vettel held the lead until the second round of pitstops after lap 20 lap when Button got out ahead, and led Vettel, Alonso and Webber for rest of the race.
"This circuit is very special,'' Button said. "We love this place and it was great to get a win here. I want to thank the team. The improvements that they did to the care were impeccable.''
The ongoing feud between McLaren's Lewis Hamilton and Ferrari's Felipe Massa continued in Sunday's race. The two drivers made contact at the chicane when Hamilton cut in front of Massa. Minor parts were sent flying as the front tires of both cars made contact.
The two had a collision at the Singapore Grand Prix two weeks earlier and Ferrari's Massa lashed out at Hamilton, saying the McLaren driver endangered other drivers with reckless driving. Race officials investigated the incident but no further action was taken.
Hamilton finished fifth and Massa seventh, separated by Mercedes' Michael Schumacher. Sauber's Sergio Perez, Renault's Vitaly Petrov and Mercedes' Nico Rosberg rounded out the points positions.
Japanese driver Kamui Kobayashi, who started seventh, had a slow start and dropped down to 12th early in the race and finished 13th.
Toro Rosso driver Sebastien Buemi was the only non-finisher, losing his right front tire and being forced to park in the gravel.
Conditions were ideal for Sunday's race with clear skies and temperatures at 35 degrees Celsius at the start of the race.
- AAP