免費開始練習
高考申論題 105年 [資訊處理] 程式語言

第 一 題

📖 題組:
請回答下列問題:(每小題 5 分,共 10 分) (一) 給定一個整數陣列 S[n],請寫出一個副程式 int SelectionK(int *S, int n),此函數可以回傳(return)第 K 大的數值。 (二) 給定一個陣列 S[n],請寫出一個演算法,此演算法可以用平均時間複雜度為 O(n) 的效率,回傳(return)第 K 大的數值。
📝 此題為申論題,共 2 小題

小題 (一)

給定一個整數陣列 S[n],請寫出一個副程式 int SelectionK(int *S, int n),此函數可以回傳(return)第 K 大的數值。

思路引導 VIP

看到此題需先注意函數簽名缺少了參數 K,作答時應合理假設 K 為全域變數或另有定義。因題組第二小題才要求 O(n) 的時間複雜度,本小題最適合使用與函數名稱呼應的「部分選擇排序(Partial Selection Sort)」,執行 K 次尋找最大值的操作即可,時間複雜度為 O(K×n)。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用選擇排序(Selection Sort)的概念,由於只需要尋找第 K 大的數值,不需要將整個陣列完整排序,只需執行 K 回合、每次挑選出剩餘未排序陣列中的最大值即可。 【解答】 由於題目給定的副程式簽名 int SelectionK(int *S, int n) 中並未包含 K 作為傳入參數,在作答時應合理假設 K 為全域變數(Global Variable)或已透過巨集(Macro)定義。以下採用 C/C++ 語言實作「部分選擇排序」來達成目標:

小題 (二)

給定一個陣列 S[n],請寫出一個演算法,此演算法可以用平均時間複雜度為 O(n) 的效率,回傳(return)第 K 大的數值。

思路引導 VIP

看到「找第 K 大(或小)元素」且要求「平均時間複雜度 O(n)」,必須直覺聯想到「快速選擇(Quickselect)」演算法。該演算法利用 Quick Sort 中的分割(Partition)概念,每次只需遞迴包含目標值的單側區間,無需對完整陣列進行排序,進而將平均複雜度從 O(n log n) 降至 O(n)。

🤖
AI 詳解
AI 專屬家教

【破題】本題要求平均時間複雜度為 O(n) 的效率尋找第 K 大數值,最佳解法為採用「快速選擇(Quickselect)」演算法。 【論述】 一、演算法設計理念

📝 同份考卷的其他題目

查看 105年[資訊處理] 程式語言 全題

升級 VIP 解鎖