Java練習題(三):Bubble Sort 泡沫排序法

最近希望花點時間,重新訓練自己解題的能力,故找了一些經典的題目進行練習。
解法不一定是最有效率、最低複雜度、最佳效能的,完全是依照自己的想法做!

---

泡沫排序法:給定一數列後,進行排序時會從第一位開始,與第二位進行比較,若數字較大則往前移動兩者互換位置;再用第二位與第三位比較、第三位與第四位比較...。所以當進行第一次後,最大的數已被排在最後面,理論上需要將n個數字都跑一遍,但這邊可使用一個布林變數進行判斷,若有一次沒有進行任何換位的動作代表數列已經是排序完成,後面不需再執行。

假設題目要求:給一任意數N,生成長度為N的整數數列,並以此進行bubble sort。

程式碼可如下:

Java 練習題(二):巴斯卡(Pascal)三角形

最近希望花點時間,重新訓練自己解題的能力,故找了一些經典的題目進行練習。
解法不一定是最有效率、最低複雜度、最佳效能的,完全是依照自己的想法做!

---

巴斯卡三角形長得如下:
             1
           1    1
        1    2    1
    1     3    3    1
  1    4    6    4    1
1............................1

從上圖可以觀察到,從第三層開始,每層的最左、右邊的值為1,其他的第M層第N值為第M-1層的第N-1 + N 的和。

假設題目要求:給任一數字N,印出巴斯卡三角形中第N層的數列。
構想:使用迴圈從3 to N,依序計算出每層的數列,使用兩個Array,一個用來儲存上一層的值、一個用來儲存第N層的值。程式碼如下:



Java 練習題(一):Fibonacci number 費氏數列

最近希望花點時間,重新訓練自己解題的能力,故找了一些經典的題目進行練習。
解法不一定是最有效率、最低複雜度、最佳效能的,完全是依照自己的想法做!

---

先來個暖身吧...

費氏數列範例:
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89.....

從以上數列可以觀察到,從第三個數字開始,其值為前兩個數字的相加。
即:2 = 1+1; 3 = 2 + 1; .........
即:Fn = F(n-1) + F(n-2);

假設題目要求:給一數字N,求費氏數列中第N數的值
構想:N = 1 or 2時,直接輸入Ans = 1; 若N >=3,則進入迴圈判斷計算(N=3 to N),利用兩個變數儲存 N-1 與 N-2 的值,程式碼如下: