Championship leader Rossi came home more than five seconds ahead of second-placed compatriot Andrea Dovizioso (Ducati) with Cal Crutchlow (Honda) finishing third.
The stage seemed set for Marquez to win his second straight race this season after building a lead of more than four seconds but Rossi weaved his way from eighth on the grid to the front.
The nine times world champion, who also won in Qatar, showed he is back to his best as he moved up to second place behind Marquez on the 11th lap.
‘HE TOUCHED ME’
There was still plenty of work to do, though, to rein in Marquez but Rossi gradually ate into his rivals' advantage and was ready to pounce on the second-last lap.
Rossi went wide on a corner and cut across Marquez who collided with the Italian's back wheel and went over.
Rossi told reporters later: “I am sorry about this, he touched me on the corner and I hope he is okay. It was a great race.”
Rossi leads the overall standings with 66 points ahead of Dovizioso on 60 and Andrea Iannone (Ducati) with 40.
Rossi’s factory Yamaha team-mate Jorge Lorenzo is fourth on 37 with Marquez trailing on 36 ahead of Crutchlow with 34. - Reuters
Original source: Rossi wins Argentine MotoGP thriller