【步兵 c++】一個排序算法題 by EOS.
年後第一次些博客,把丟下的東西拾起來。比如說 算(bo)法(ke)=、=
廢話不多說(不好意思講自己少寫了多少篇),進入正題!
一個不大不小的發現
當一個有序數組經過幾次相鄰元素的調換後,會變成奇偶數分離的現象。
至於這是個什麼算法麼,哈哈、、、、、、我也不知道=、=
(ps: 學術型東西我不太在行,不要在一細節)
寫了算法驗證了下,應該是具有普遍性的。麼有問題。
思維發散
把 1-10 十個數字看成一串規則有序的變量,我們就可以輕易實現這樣的效果。
然後再把 c 視爲 ab 組成的一個整體。又會出現下面的現象。
(圖-o_o)
而a1-an + b1-bn,我們只需要1和n做一下交換,step設爲2,做一個循環,
就可以輕鬆變爲以下狀態:
再稍微一變換就可以(圖-o_o)中 的第一組數據的樣子。
也就是說可以用 空間複雜的爲1, 來實現 “a1-anb1-bn 轉變爲 a1b1-anbn”。
總結
其實,要實 “a1-anb1-bn 轉變爲 a1b1-anbn”並不難,申請一個同樣大小的空間,
把0,n, 1,n+1 這樣依次放進去是最簡單也是最直觀的,但當空間遇到瓶頸時,這個算法就直接pass了。
又或者數據有幾十兆,開銷就會變得非常驚人。這種時候算法的重要性就凸顯出來。
其實是一道面試題,但是當時心沒有靜下來沒有很好的處理好,總要有始有終,
所以寫個博客督促一下自己,順便做一下分享。
算法是重要的,海量的業務邏輯業也比不上一個精妙的算法~效率至上!
See Again~
之前
真愛無價,歡迎打賞~