The 176.4-kilometer ride from Buochs to Leuggern finished as expected in a bunch sprint despite a four-man breakaway staying out in front for most of the stage.
When it came to the sprint, Kristoff ripped clear of the pack with the winners of the previous two days' stages, Peter Sagan and Arnaud Demare, coming in second and third respectively.
"I knew the sprint and the uphill and I knew I could make it from 150 metres to go," said Kristoff, who won three stages at last month's Tour of Norway.
"I'm really happy and this is my biggest victory."
The Katusha rider was familiar with the final ascent, having taken part in a local race over the same route last week.
"I had already climbed it 15 times but I can assure you that the last ascent seemed much longer than all the others," added the 25-year-old.
In the overall standings, Frank, of Switzerland, remains 23 seconds ahead of Czech Roman Kreuziger, with last year's champion Rui Da Costa of Portugal 35 seconds behind in third place.
The day was also marked by the abandonment of Giovanni Visconti, the three-time Italian champion who won two stages on the recent Giro d'Italia.
He started the day in fourth place overall, but was forced to withdraw after suffering concussion in a crash and was later taken to hospital to be placed under observation.
Visconti's withdrawal follows that of Canada's Ryder Hesjedal, who pulled out after suffering a nasty fall on Monday's third stage.
Thursday's sixth stage is a 176-kilometre ride from Leuggern to Meilen on the banks of Lake Zurich.
It features two third-category climbs but a flat run-in to the finish should once again suit a bunch sprint.
The nine-stage race concludes .