Police raided the classroom building after the attacker, who initially held six people, broke off negotiations.
The incident began shortly before noon when the man, whose identity was not immediately known by police, walked into Platte Canyon High School in the small mountain town of Bailey, Colorado, and opened fire.
The wounded girl was rushed by helicopter to St Anthony Central hospital in Denver but died there, hospital spokeswoman Bev Lilly said.
Her classmate and fellow hostage was apparently not hurt in the incident, which drew comparisons to the 1999 Columbine massacre that took place 48km away in Littleton, Colorado.
“We tried talking to this individual and had some success,” Park County Sheriff Fred Wegener told reporters. “He started to release hostages, but eventually he gave us a deadline of 4 o’clock [to back off] and ceased talking to negotiators, at which time we decided a tactical solution needed to be done.
“Entry was made, the suspect shot one of hostages and then shot himself.”
More than 400 students were
The attacker had told police he had explosives, but none were found at the scene. Investigators recovered a handgun and an empty backpack.
His connection to the school was not immediately clear and police said they had not found a motive for the incident, which prompted the evacuation of hundreds of students.
State and local police and federal agents descended on the 460-student school and surrounded it for several hours before the raid.
In 1999, students Dylan Klebold and Eric Harris went on a shooting rampage at Columbine, killing 13 people and wounding 21 others before they committed suicide.
On September 13, one woman was killed and 19 people injured after a man opened fire in a college in Montreal, Canada.