底下用三種版本的程式碼說明:
/* * 第一版:史前時代--轉木取火 * 採用大容量的靜態數組分配。 * 限定輸入的數據個數。 * 採用動態內存分配。 */ #include <stdlib.h> #include <iostream> using namespace std; int compare(const void *arg1, const void *arg2); void main(void) { const int max_size = 10; // 數組允許元素的最大個數 int num[max_size]; // 整型數組 // 從標準輸入設備讀入整數,同時累計輸入個數, // 直到輸入的是非整型數據為止 int n; for (n = 0; cin >> num[n]; n ++); // C標準庫中的快速排序(quick-sort)函數 qsort(num, n, sizeof(int), compare); // 將排序結果輸出到標準輸出設備 for (int i = 0; i < n; i ++) cout << num[i] << "\n"; } // 比較兩個數的大小, // 如果*(int *)arg1比*(int *)arg2小,則返回-1 // 如果*(int *)arg1比*(int *)arg2大,則返回1 // 如果*(int *)arg1等於*(int *)arg2,則返回0 int compare(const void *arg1, const void *arg2) { return (*(int *)arg1 < *(int *)arg2) ? -1 : (*(int *)arg1 > *(int *)arg2) ? 1 : 0; }
/* * 第二版:工業時代--組件化大生產 */ #include <iostream> #include <vector> #include <algorithm> using namespace std; void main(void) { vector<int> num; // STL中的vector容器 int element; // 從標準輸入設備讀入整數, // 直到輸入的是非整型數據為止 while (cin >> element) num.push_back(element); // STL中的排序算法 sort(num.begin(), num.end()); // 將排序結果輸出到標準輸出設備 for (int i = 0; i < num.size(); i ++) cout << num[i] << "\n"; }/* * 第三版:唯美主義的傑作 */ #include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; void main(void) { typedef vector<int> int_vector; typedef istream_iterator<int> istream_itr; typedef ostream_iterator<int> ostream_itr; typedef back_insert_iterator< int_vector > back_ins_itr; // STL中的vector容器 int_vector num; // 從標準輸入設備讀入整數, // 直到輸入的是非整型數據為止 copy(istream_itr(cin), istream_itr(), back_ins_itr(num)); // STL中的排序算法 sort(num.begin(), num.end()); // 將排序結果輸出到標準輸出設備 copy(num.begin(), num.end(), ostream_itr(cout, "\n")); }那你了解了嗎?
沒有留言:
張貼留言