精華區beta Gossiping 關於我們 聯絡資訊
先表態一下, 我不是學資工的, 因為我從小就在摸這些些東西 所以我還頗能夠了解為什麼有那麼多資工系的人會反彈 ==== 我是分隔線, 以下是重點 === 其實補充一點有許多人沒有講到的重點 有人說你會寫字, 但並不代表你會寫詩 這個其實還蠻中肯的, 因為資工有教優化 以下兩個都是做同樣的效果, 都是將數字順序依序排好 但是後者個效率遠比前者大, 這就是所謂演算法帶來的優化 這是資工一生中最追求的東西 // ===============前置準備動作================ // 產生大量的亂數 int a[60000]; for (int i=0, i<60000, i++) { a[i]=rand()%60000; } // ============版本1-俗稱SelectionSort=============== void SelectionSort(int a[], int array_size) { int i; for (i = 0; i < array_size - 1; ++i) { int j, min, temp; min = i; for (j = i+1; j < array_size; ++j) { if (a[j] < a[min]) min = j; } temp = a[i]; a[i] = a[min]; a[min] = temp; } } // 使用方法: SelectionSort(a, 60000); // ============版本2-俗稱HeapSort=============== void makeheap ( int x[ ], int n ) { int i, val, s, f ; for ( i = 1 ; i < n ; i++ ) { val = x[i] ; s = i ; f = ( s - 1 ) / 2 ; while ( s > 0 && x[f] < val ) { x[s] = x[f] ; s = f ; f = ( s - 1 ) / 2 ; } x[s] = val ; } } void heapsort ( int x[ ], int n ) { int i, s, f, ivalue ; for ( i = n - 1 ; i > 0 ; i-- ) { ivalue = x[i] ; x[i] = x[0] ; f = 0 ; if ( i == 1 ) s = -1 ; else s = 1 ; if ( i > 2 && x[2] > x[1] ) s = 2 ; while ( s >= 0 && ivalue < x[s] ) { x[f] = x[s] ; f = s ; s = 2 * f + 1 ; if ( s + 1 <= i - 1 && x[s] < x[s + 1] ) s++ ; if ( s > i - 1 ) s = -1 ; } x[f] = ivalue ; } } // 使用方法: 先執行makeheap(a, 60000); // 然後再heapsort(a, 60000); ======== 我是分隔線 ========== 我相信要是你有在玩遊戲的話, 應該有的時候會有人說 "啊, 這個遊戲優化沒做好, 好Lag啊" 這句話就是說給那種根本沒有把資工課上好的人聽的 或者就是說給你這種自以為學會Coding就上陣的人聽的 -- "To learn is what I need; 學習乃我所需 書中自有 To teach those who needs 教導需指導者 http://kuso.cc/4Ua8 黃金屋 to learn is my duty..." 乃我的職責也 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.227.49.41 ※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1434074196.A.A19.html
ayenliou: 未看先推 06/12 09:58
jaid: 你在八卦貼code會被end吧 06/12 09:58
Asbarla: 建議你再解釋時間複雜度 再帶入code比較完整 06/12 09:59
m0806449: 趕快推 不然會被人家笑說看不懂 06/12 10:01
willysunny: 就是要End直接看結尾啊 XDDDD 06/12 10:01
future108: C++剛好考排序 剛溫蛤 06/12 10:02
gsm60kimo: 程式設計師的價值比不過賣雞排的人..是有這麼一段啦 06/12 10:03
buke: 推推 我只會寫氣泡排序QQ 06/12 10:03
moonshade: 資工的知識還是很皮毛,要寫快的程式是要實做的功力 06/12 10:04
moonshade: 同一個演算法不同程度的人做就會差很多倍了 06/12 10:05
moonshade: 像你舉這個例子,數量夠大quick sort會比較快 06/12 10:06
moonshade: 大蓋有個threshold要換algorithm 先quick sort 06/12 10:06
moonshade: 切到夠小換成heapsort... 06/12 10:07
vn509942: http://i.imgur.com/iuQxLHr.jpg 06/12 10:08
moonshade: quick sort 做 multi-thread 也好做... 06/12 10:08
ymx3xc: 嗯嗯嗯 我也是這麼覺得 06/12 10:08
pm2001: 除非很底層 不然都直接拉現成套件來用 哪來時間自己慢慢寫 06/12 10:08
gofigure: 這種東西在學生時期自爽用的而已 06/12 10:09
gofigure: 等你面對的是一個龐大的專案 重點是整體規劃能力 06/12 10:09
taimu: = = "優化"這詞還真是淺移默化 ...... 06/12 10:09
shiningkan: 最佳化 06/12 10:10
shcjosh: 網路上的東西入門的很多 但進階的超少 所以想靠網路學起 06/12 10:10
SuperUp: http://goo.gl/56N0 sqrt函數 每次這話題都會想到這個 06/12 10:10
shcjosh: 我看是很難 06/12 10:11
moonshade: 整體規劃能力是去工作才學的,沒師父教很自學 06/12 10:11
tank44444: 以現在處理器速度 n=60000你用bubble也可以啦 06/12 10:11
shiningkan: Code的可讀性也很重要 06/12 10:15
sean3381212: code. 是一門哲學 06/12 10:18
willysunny: 舉例而以咩 XD 06/12 10:18
colawei: 實戰中這些排序程式沒用 有現成的可用 但精膸很重要 06/12 10:28
GreenBow: 虛支那用語 06/12 10:28
bill0205: 我怎麼有股衝動想要在code最上方加上/*... 06/12 10:28
lrt89604: 軟體工程啊啊啊 06/12 10:29
seed1132001: hello world 06/12 10:34
mdkn35: 結果別人1分鐘拉好原件已經跑出結果 你還在慢慢輸入 06/12 11:08
ss1h2a3tw: heap sort 只是基礎 06/12 11:12
nonedude: 跟什麼科系根本沒關係 有些人唸完還不是寫得很爛 06/12 11:14
nonedude: 看過一個118畢業的 PLC寫的跟鬼一樣 後來接手超痛苦 06/12 11:15
fakespace: 在rand()前加個srand(time(NULL))比較好吧 06/12 11:42
ayasesayuki: 優化 匪語 06/12 11:49
andersontom: 说真的 优化 不是人人都會 也都學得起來的 06/12 11:51
andersontom: 而且嘴巴懂优化 跟骨子里懂优化 又有區別的 06/12 11:51
andersontom: 而且程式界有一句话 能立即让我用的程式就是好程式 06/12 11:52
andersontom: 写的再好 职场上哪会管你写的多优多棒 06/12 11:54
ccmite: 文組給推 06/12 13:37
Selah: 你在這邊講外國話幹嘛,說中文好嗎 06/12 13:43