冒泡排序法<Bubble sort> 使用c#
鑒於近日去南部某家科技公司面試,其中有考到一題簡易演算法(也就是傳說中的泡沫排序法)
想不到我盡然花了將近10分鐘想
會不會是現在的工作過得太安逸了(誤
好吧,今天花點時間再把邏輯思緒整理一下,並且在這邊分享給需要的人
首先,我們先來預想一下
畫面上我要有兩個Label
用來呈現原始陣列內的數字排序、排序後的數字排序
以下我們已webform來實作
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" ></asp:Label>
<br />
<asp:Label ID="Label2" runat="server" ></asp:Label>
</div>
</form>
然後我們再Code Behind 開始思索
//我這邊需要一個int的陣列來塞入我要的數值
//所以來個
int[] aa = new int[5]; //你喜歡也可以用10....
//然後為了不想要數字很死,所以用個random來產生數字
Random a = new Random();
for (int i = 0; i <= 4; i++)
{
aa[i] = a.Next(0, 99);
}
//我們的陣列裡面都有數字後,就讓label1來顯示我們的原始排序
foreach (int r in aa)
{
Label1.Text += r.ToString() + ",";
}
//再來就是重頭戲拉~~
//由下可見,我們的第一個迴圈,就是跑陣列大小的次數
for (int i = 0; i <= aa.Length; i++)
{
//再來就是第二個迴圈,跑 lenth-1 的次數
for (int j = 0; j < aa.Length-1; j++)
{
//下方程式碼可見,只要是前一格大於後一個,就把他的位置做更換,再塞入陣列
if (aa[j] > aa[j + 1]) {
int temp = aa[j];
aa[j] = aa[j + 1];
aa[j + 1] = temp;
}
}
//然後就是在把陣列中的數字排序印出來,大功告成~~
foreach (int r in aa)
{
Label2.Text += r.ToString() + ",";
}
第二個迴圈j, 不用每次都全部重排.
應該寫成
<pre class="c" name="code">for (int j = 0; j < aa.Length-1-i; j++)
因為第一次排, 最小的已放到最下面了, 所以第二次排可以不用再抓出來排.
這樣可以省時, 提高效能.
for (int j = 0; j < aa.Length-1-i; j++)
這樣更好...
<pre class="c" name="code">for (int j = 0,len = aa.length-1; j < len-i; j++)
不需要每次都把陣列的長度算一次
我工作五年後,去找工作還有考智力測驗呢
還考國文、英文
如果是大公司,我會耐著性子試試看(當然也沒時間準備這些考試,直接上場)
若是小公司還搞這招,我就打電話跟他們婉拒了
老師啊~~
如果照您的等級來說當然婉拒拉XDDD
我們這種小咖還是得照著來><
分享一個技巧:
要把兩個同類型的數字變數交換,不必寫
<pre class="c" name="code">int temp = aa[j];
aa[j] = aa[j + 1];
aa[j + 1] = temp;
這樣需要多一個中間數。只需寫:
<pre class="c" name="code">aa[j] ^= aa[j + 1];
aa[j + 1] ^= aa[j];
aa[j] ^= aa[j + 1];
三次 XOR 運算就行了。
感謝大大提攜
這我倒是沒有多想
因為我很直觀的就多設一個Temp來暫存 XDD
我曾經看過有一家公司的招考題是...
劃出九九乘法表及二分法索引的程式流程圖。
...
這種看似簡單但要劃出流暢的流程圖來,還要能解說,那就是一大考驗了。
...
該公司是要徵系統分析師..
那個程式我就先不說了,年紀大了,天氣又冷,身體要緊.
那個什麼最強IDE,請問他可以用來寫 Erlang / Elixir嗎??
是號稱號稱
非我所指稱XDD
for (int i = 0; i <= aa.Length; i++)
{
//再來就是第二個迴圈,跑 lenth-1 的次數
for (int j = 0; j < aa.Length-1; j++)
{
for(int i=0;i<= aa.Length;i++)
{
for(int j=i+1;j< aa.Length;j++)
{
}
}
我比較喜歡順序相同的
最近為考試而考試
有的書很清楚,有的書,比網路範例差太多,看到快丟了
同一本書,同一個問題,不同地方寫法不同
或有時正寫,有時反寫
有的課本就到處貼範例
順序一致看起來比較清楚,不然三個回圈,四個回圈後
你的Bugs就解不完(越小,越簡單,越容易被輕忽的地方,Bugs越難除錯)