顯示具有 演算法 標籤的文章。 顯示所有文章
顯示具有 演算法 標籤的文章。 顯示所有文章

2008年11月20日 星期四

QuickSort using C++

QuickSort:一種遞迴技術的排序

(a) 分割步驟:選取未經過排序陣列的第一個元素,並決定它經過排序之後的陣列中的最後位置。

假設此陣列未經排序的第一個元素為21
21 32 5 67 0 12 4 23 53 14

經過排序後,我們找到21在陣列中的最後位置。
12 4 5 14 0 21 67 53 32 23

換句話說,以21為基準,其左邊的所有元素值皆小於它,右邊的所有元素值皆大於它。

我們因此可以將此陣列分成兩個子陣列。
子陣列I:12, 4, 5, 14, 0 (左邊 五個元素)
子陣列II: 67, 53, 32, 23 (右邊 四個元素)

(b) 遞回步驟:對每個位排序的子陣列,執行步驟(a)

(b1)每次對子陣列執行步驟(a)時,必會找到一個元素放在排序過陣列的最後位置上。{同上述(a)之解釋 keypoint: 把21 32 5 67 0 12 4 23 53 14 視為一個子陣列}

(b2)當子陣列由一個元素所組成時,則此唯一個元素必是已經排序過的,因此,這個元素已位在它最後的位置上。

我們如何決定每個子陣列第一個元素的最終位置呢?
EX:
37 2 6 4 89 8 10 12 68 45

(A)從陣列最右邊的元素開始,將每個元素與37比較,直到找出某個小於37的元素。然後將37和這個元素作交換。第一個比37小的元素是12,因此,37會和12交換。
12 2 6 4 89 8 10 37 68 45

(B)從陣列最左邊開始,但是在元素12之後,將每個元素與37比較,直到找到比37大的元素為止。

參考資料: C++程式設計藝術 第四版 DEITEL&DEITEL, Pearson

2007年12月7日 星期五

lab Fraction equality test

Write a program to implement a method that can check whether 2 fractions are equal. You will implement a class called Fraction consisting of a numerator and a denominator. The equality test of 2 fractions should return a boolean value.

Use the following as the tests.
  • 1/2, 2/4
  • 5/6, 6/7

Hints:
Fraction f1, f2;
f1.equals(f2);



































本題的答案在此!!



















(附)最簡分數

因為要讓電腦做約分的動作,所以就要讓電腦知道什麼是〝最大公因數〞。在此我利用〝輾轉相除法〞,讓電腦知道分子、分母的最大公因數為何,進而得到最簡分數。



































主程式




































程式執行結果

最簡分數:


































判斷兩個分數是否相等