Police commissioner Ronny Iden told reporters that the suspect, a 31-year-old man, lived in Aardal, a small town near the scene of the attack.
The victims were two men in their 50s, the bus driver and a Swedish passenger and a 19-year-old woman, police said, adding that they were the only ones on the bus besides the suspect.
The suspect also suffered knife wounds and was currently hospitalised in Bergen, Norway's second largest city, he added.
The alleged attacker was overpowered by firefighters who rushed to the scene of what they initially believed was a traffic accident, police said.
The long-distance bus was on the route between the mountainous Valdres region, a popular area for skiing, and the Norwegian capital Oslo.
The nearest police station was about 89 kilometres (55 miles) from the deadly attack and first officers arrived at the scene about an hour after the alert was given.
Nothing suggests that the alleged perpetrator and the victims knew each other, police said, adding that police criminal investigators were coming from Oslo to help with the inquiry.
"The bus was on the side of the road, so we stopped our car and ran over," the witness told TV2 Nyhetskanalen, who identified himself only by his first name Leif.
He said he and another person tried to open the doors, but in vain.
"It was impossible to open the doors. Then we saw a dark-skinned person inside the bus. At first, we thought he was trying to get out but then saw he was moving around with a knife, and we realized that the situation was quite different," he said.
He was sentenced to treatment in a psychiatric hospital.
