可以這樣

來源: 2009-07-25 11:34:08 [博客] [舊帖] [給我悄悄話] 本文已被閱讀:

把你的算法改變一下:

紀錄開始的位置為初始為止,最終位置為結束位置。
從A1開始,依次向右檢查。
如果該數和初始位置不對應,跳過該數。
否則:紀錄該數位置。從它開始,依次把數放到結束位置,並且把結束位置的數置換出來。檢查結束位置是否為紀錄,如果是則跳過(一個循環完成)

隻要初始位置和結束位置計算時間是常數,這個算法就應該是線性時間,同時占用常數內存