12/7
講師:吳崇維(wayne)
今日目標~
Algorithm!
對於一個固定形式的問題,
產生一套流程->
對於任何的輸入組合
皆能產生預期的答案!
推薦閱讀:)
這也是演算法~
固定:輸入兩個整數
輸出:兩個較大者
一套固定的輸入形式對應到答案!
想一想:如果一行程式跑1單位時間
這個for跑了~?
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
想一想:如果一行程式跑1單位時間
那麼這個for跑了~?
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
想一想:如果一行程式跑1單位時間
還有這個for跑了~?
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
for (int i = 0; i < 10000; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
cout << "oops\n";
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cout << "oops\n";
}
}
跑了10000次,是固定次數
又稱常數時間
跑了N次,隨著N變大次數變多
又稱線性時間
跑了N平方次隨著N變大次數變多,且增多的很快
假設人腦作 x = x+1 要一秒鐘
則電腦一秒可以作
人腦需要作31年的速度!
電腦一秒可以跑 10^ 8 ~ 10 ^9
個指令!
例如:
a佔了100個int -> 400 bytes
b佔了10000個int -> 40000 bytes
int a[100];
int b[100][100];
平常不需要太注意空間
不要太誇張的大就好
Ex:
int a[100000000];
一定會爆XD
思路:先把最大的放到後面
接著再放第二大的...排序完所有數字!
如何把實際想法換成程式呢?
本次作業:看影片,資料!
引導你們寫出泡沫算法!
如何將最大的元素放到最後面
=>
練習1 : 給你一些數字,把最大的數字慢慢換到最後面
EX:
2 4 5 1 3 => 2 4 1 3 5
最大的元素放到最後面後
=>
剩下一個子問題!
不管最後端的5了~
EX:
2 4 5 1 3 => 2 4 1 3 5
=> 2 4 1 3
慢慢把縮小問題範圍!直到剩下1
EX:
2 4 5 1 3
=> 2 4 1 3 5
=> 2 1 3 4 5
=> 2 1 3 4 5
=> 1 2 3 4 5
=> 1 2 3 4 5
試試看自己寫出泡沫排序!
如何將最大的元素放到最後面
=>
給你一些數字,
找出最大的數字
EX:
2 4 5 1 3 => 5
找出最大元素後,放到最後面
EX:
2 4 5 1 3 => 5
=> 2 4 3 1 5
慢慢把縮小問題範圍!直到剩下1
EX:
2 4 5 1 3
=> 2 4 3 1 5
=> 2 1 3 4 5
=> 2 1 3 4 5
=> 1 2 3 4 5
=> 1 2 3 4 5
注意:必須要符合選擇排序的精神,不僅僅是排序完成
一起努力快樂寫程式吧!