Crawford, who led the Knicks with 30 points, sprinted off the floor with his arms over his head as the buzzer sounded.
"It almost felt like we won the championship," said Crawford, who hit 11 of 23 shots. "We needed this win to break the cycle."
David Lee added 17 points and nine rebounds for the Knicks, who had matched their longest skid of the season with an overtime loss to San Antonio on Friday. The Knicks' last win was an 89-81 home victory over Philadelphia on Jan. 25.
Rose, who did not play in the first half, played 15 minutes in the second half, scoring seven points and grabbing five rebounds, including two huge baskets in the final two minutes.
Crawford tied it at 93 with 3:45 remaining, hitting a 3-pointer as he fell down. Rose's follow shot with 2:35 to go gave the Knicks a 97-96 lead. After Andrew Bogut was called for an offensive foul, his sixth foul of the game, Rose hit a 19-foot jumper with 1:50 left to extend the lead to 99-96.
Charlie Bell then stole the ball from Crawford and scored on a layup with 31 seconds remaining to cut the lead to 99-98. Crawford missed a running jumper with 7 seconds remaining and Villanueva dove on the floor to get the rebound.
Crawford called Rose "the player of the game."
"We badly needed this win," Rose said. "We've been playing better lately, but we had nothing to show for it."
Knicks coach Isiah Thomas also had a lot of praise for Rose.
"He's our captain and came in and did all the little things," Thomas said. "He fought with great energy and played with great intensity."
Thomas said the Knicks' recent struggles have taught the team some "difficult lessons." The Knicks had led in the second half of seven of the eight losses, holding double-digit leads in four of the games.
"I thought our composure in the last three or four minutes of the game was very good," he said.
Thomas praised his team's defense on the Bucks' last shot, but also admitted they got "a little lucky" that Ruffin, who averages just 1.4 points per game, ended up with the ball.
"For us, luck hasn't been falling our way," he said. "Tonight, we were a little lucky."
"We let down and let them back in the game," Villanueva said. "To lose a game like this really hurts. You work so hard and then to let it go at the end is just tough."
Redd, who returned to the lineup after missing six games with a left knee strain, was left wondering after the game how the Bucks had lost such a big lead.
"We have to look at film and figure it out," he said.
The Bucks broke open a close game in the third quarter with a 23-4 run, grabbing an 81-64 lead with 2:50 remaining when Villanueva hit a jumper. Villanueva and Desmond Mason each had eight points during the run.
The Knicks responded with a 15-0 spurt at the end of the third quarter and the beginning of the fourth, cutting the lead to 81-79 on Crawford's 19-foot jumper with 10:34 left.
The teams battled back and forth during the first half, with the biggest lead being by four when Bell hit a jumper with 5:02 remaining in the second quarter to give the Bucks a 42-38 advantage. The Bucks led 50-48 at halftime after Mason hit two free throws with 3.6 seconds left.
The New York Post reported Saturday that Knicks guard Stephon Marbury would be out for the season following ankle surgery, but Thomas said he hoped that wouldn't be the case. "We still hope that it's indefinite. We haven't given up on him for the season yet," Thomas said. "Hopefully we'll have him back." ... Redd's 21 points gave him 9,904 during his eight seasons with the Bucks, passing Junior Bridgeman for sixth place on the team's career scoring list. Bridgeman, who was at the game to be honored at halftime as part of the Bucks' 40th anniversary celebration, scored 9,892 points in 10 seasons. ... Knicks guard Quentin Richardson returned to the starting lineup after missing the last two games with a sprained ankle.