作者onemaydayme (喔椰~~)
看板PHP
標題[請益] 陣列數值排序
時間Wed Apr 23 18:50:14 2014
想請問各位大大
今天如果我有一維陣列的數值為2,2,3,3,4,4,5,5,6,7,8,9,10,11,12
要怎麼把它自訂排序變成2,3,4,5,2,3,4,5,6,7,8,9,10,11,12 ?
或者是2,3,4,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12
要怎麼把它變成2,3,4,5,6,7,8,9,10,11,12,6,7,8,9,10,11,12 ?
跪求各位大大解惑
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.86.131
※ 文章網址: http://webptt.com/m.aspx?n=bbs/PHP/M.1398250217.A.6EF.html
2F:→ kerash:我是按照你的需求做,不是通用 04/23 20:56
3F:→ onemaydayme:多謝大大指點,但是我跑了你的程式,發現第一個case 04/23 22:03
4F:→ onemaydayme:會變成2~12印兩次,我的意思是只有重複兩次的數值 04/23 22:04
5F:→ onemaydayme:需要排,也就是總長度其實是不變的 04/23 22:04
6F:→ bibo9901:一樓看得懂規則喔 翻譯一下 04/23 23:10
7F:→ mmis1000:找差一的塞,不然就找最小的 04/23 23:22
9F:→ kerash:咦.. 我測試時正確,我再看看 不過這個條件很奇怪就是.. 04/24 00:03
10F:→ mmis1000:上面貼的是假設沒有負數的狀況,所以省略了一些判斷 04/24 00:18
11F:→ chenlarry:樓主給的兩個數列排序之後的結果好像邏輯不一樣 04/24 00:19
12F:→ chenlarry:推文給的都是最小跑到最大不重複然後再重新來過 04/24 00:19
13F:→ chenlarry:可是樓主第一個數列好像又不是這麼一回事,題目有錯嗎? 04/24 00:20
14F:→ chenlarry:希望樓主把題目講清楚..不然根本沒人知道規則是什麼... 04/24 00:22
15F:→ mmis1000:懂了,是後方優先 04/24 00:22
16F:→ mmis1000:可是那只是第一個的條件,這兩個條件根本不一樣 04/24 00:33
17F:→ chenlarry:摟主要解釋 1.重複的數列是要排在前面還是後面? 04/24 00:33
18F:→ chenlarry:2.數列一開始就會是排序好得嗎?還是有可能會打亂? 04/24 00:33
19F:→ chenlarry:根據樓主的回答會直接改變這隻程式的複雜度 04/24 00:34
20F:→ mmis1000:是自動從有切齊的那頭開始跑?(1的min跟2的max) 04/24 00:36
21F:→ mmis1000:樓主要的是被排序的連續數列,可是這些數列的排序是? 04/24 00:41
22F:→ mmis1000:以 頭/尾為基準 遞增/遞減排序 ? 04/24 00:42
24F:→ kerash:修正 應該兩個都對了 ... 少加了一個判斷 04/24 01:32
26F:→ kerash:我的假設是,假如第一個遇到就重複,就先把重複貼完(直到 04/24 01:39
27F:→ kerash:不重複),貼完後再從頭開始 foreach 一次,這是第一條 04/24 01:39
28F:→ kerash:第二個規則是,假設初始不重複,則一直跑,直到遇到重複 04/24 01:40
29F:→ kerash:接著將重複的數字記錄,同時先將數列跑完一次,等結束後 04/24 01:40
30F:→ kerash:再將重複的那些數字loop跑完,這樣來讓兩個條件同時達成 04/24 01:41
31F:→ kerash:但是這條件限制很大,就是中間假設不連續就會錯誤 04/24 01:41
34F:→ kerash:再貼下去我好像會貼太多了 :[ 04/24 01:52
35F:→ chenlarry:因為樓主沒說清楚,我就以他給的例子所看到的部份來假設 04/24 01:56
36F:→ chenlarry:1.只會重複1次 2.只會重複開頭或結尾其中一種 04/24 01:58
38F:→ chenlarry:重複的地方拿出來,再來決定要黏在哪 04/24 02:03
39F:→ chenlarry:我的解法也可以處理中間重複的情況 04/24 02:05
40F:→ MOONRAKER:開一個陣列,內容是2,3,4,...,12 04/24 08:33
41F:→ MOONRAKER:新陣列進來排序就照「模板陣列」的內容挑出來排 04/24 08:33
42F:→ MOONRAKER:超簡單的,有沒有規則都合適,愛怎麼排就怎麼排,壓比 04/24 08:34
43F:→ onemaydayme:對不起我沒說清楚規則,簡單來說就是 04/24 12:43
44F:→ onemaydayme:有兩對的一定是連號的數字 04/24 12:44
45F:→ onemaydayme:抓到有兩對的那組數字,就在那段區間輸出兩次數字排 04/24 12:45
46F:→ onemaydayme:序就是了 04/24 12:45
47F:→ onemaydayme:而且這個數列一定是遞增排序好的 04/24 12:47
48F:→ onemaydayme:如果有三對重複的就會貼三次這樣 04/24 12:56
49F:→ onemaydayme:跑完k大的程式如果有三組重複的數字好像只會輸出兩次? 04/24 12:58
50F:→ onemaydayme:跑完m大的我發現可以ㄟ 04/24 13:08
51F:→ onemaydayme:感謝各位大大解惑QQ 04/24 13:16
52F:→ kerash:因為你的條件太少,我只針對重複數只有一次的狀況去跑 04/24 20:36
53F:→ onemaydayme:sorry k大 我條件應該下清楚些! 04/24 22:07