免費開始練習
地特三等申論題 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

看到函數名稱為「SelectionK」且未限制時間複雜度,應直覺想到使用「選擇排序法(Selection Sort)」的概念。只要做 K 次選擇找出前 K 大的值即可,同時需注意原題目函數簽章漏了參數 K,答題時必須明確指出並給出合理假設或修正。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用「選擇排序(Selection Sort)」的概念,尋找最大值 K 次即可找到第 K 大的數值。 【詳解】 一、程式碼實作(以 C 語言為例)

小題 (二)

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

思路引導 VIP

看到「尋找第 K 大元素」且「平均時間複雜度為 O(n)」的限制條件,應立刻聯想到「快速選擇演算法(Quickselect)」。此演算法利用快速排序(Quicksort)中的 Partition 概念,每次挑選基準值(Pivot)將陣列分區,只需針對包含目標元素的那半邊繼續遞迴尋找,從而省去對無關區間的排序時間。

🤖
AI 詳解
AI 專屬家教

【破題】本題要求以平均時間複雜度 O(n) 找出陣列中第 K 大的數值,最適合且標準的演算法為快速選擇演算法(Quickselect),其核心思想源自於快速排序法(Quicksort)的分割(Partition)操作。 【論述】 一、演算法主要步驟

📝 同份考卷的其他題目

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

升級 VIP 解鎖