Thompson, o australiano oitavo cabeça de série, precisou de oito match points para vencer o alemão por 7-5, 4-6, 7-6(2) numa maratona de três horas e 40 minutos que terminou nas primeiras horas da manhã de sábado.
Thompson vai procurar o seu primeiro título de singulares do circuito ATP quando defrontar Ruud no sábado à noite.
Ruud teve um início forte e venceu o atual campeão Stefanos Tsitsipas por 6-4, 7-6(4) na primeira meia-final da noite.
Na ronda anterior, Thompson salvou três match points ao recuperar de uma desvantagem de 6-0 e 3-0 contra Alex Michelsen.
"Acho que é um milagre. Nunca pensei que estaria aqui", disse Thompson no final do jogo.
Contra Zverev, Thompson teve cinco match points no serviço do adversário com 6-5 no terceiro set, mas o alemão salvou todos. Thompson quebrou no tiebreaker com seis pontos consecutivos. Zverev salvou outro match point, mas Thompson serviu no segundo.
"Foram mais de três horas e meia", disse Thompson. "Foi um grande jogo e eu competi até ao fim, não sei o que dizer. Estou muito cansado".
Antes disso, Ruud, quarto cabeça de série, não perdeu qualquer ponto no primeiro serviço no primeiro set, depois teve de salvar cinco set points no segundo set para selar vencer com um pneu.
"Foi um jogo muito disputado, em geral, especialmente no segundo set", disse Ruud. "Tive a sorte de salvar alguns set points e segurá-lo. Tive um pouco de sorte", acrescentou Ruud, que enfrentou set points em cada um dos dois últimos jogos de serviço, mas que conseguiu uma vantagem de 4-0 no desempate e terminou a partida ao fim de uma hora e 49 minutos.