Harmison, 28, said he wanted to concentrate on Test cricket as he quit ahead of the series with Australia and New Zealand and next year's World Cup.
"After careful consideration and having taken advice from several people who have been close to me throughout my career, I have decided to retire from one-day international cricket with immediate effect," he said in a statement on Thursday.
"This has been a difficult decision but I want to play at the highest level for as long as I can and believe that concentrating solely on Test cricket is the best way forward for me during the next phase of what will hopefully be a long England career," he said.
Harmison has struggled with his form, taking just one wicket in the first two Ashes Tests against Australia. He took five in Perth but was unable to prevent Australia taking an unbeatable 3-0 series lead.
He has taken 67 wickets in 46 one-day matches for England at an average of 30.7 runs.