免費開始練習
moea_joint_essay 113年 [資訊] 資訊管理、程式設計

第 五 題

五、請實作下列函式以完成設計 1 個插入排序法(Insertion Sort),據以依參數值決定排序方式採遞增或遞減。(18 分)
bool isInverse(int x, int y, bool isAsc); //判斷傳入的 x、y 是否反序
void InsertionSort(int *arr, int len, bool isAsc); //插入排序
(註:參數 arr 為傳入的整數陣列;參數 len 為整數陣列的長度;參數 isAsc 為是否遞增,函式 InsertionSort 應呼叫函式 isInverse。)
📝 此題為申論題

思路引導 VIP

isInverse 用來判斷是否需要交換位置,若是遞增排序 (isAsc=true),當前元素大於後面的元素 (x > y) 就是反序;遞減排序則相反。接著用標準的插入排序迴圈,使用 isInverse 來作為內層移動資料的判斷條件。

🤖
AI 詳解 AI 專屬家教
// 判斷傳入的 x、y 是否反序 (是否需要將元素往後挪動)
bool isInverse(int x, int y, bool isAsc) {
▼ 還有更多解析內容
📝 插入排序法實作
💡 將資料逐一取出,在已排序序列中由後往前尋找適當位置插入。

🔗 插入排序法單輪運作邏輯

  1. 1 取出待排序值 — 暫存當前位置元素為 key,並記錄前一索引 j
  2. ↓
  3. 2 判斷是否反序 — 呼叫 isInverse 判斷 arr[j] 與 key 是否需調換
  4. ↓
  5. 3 元素向後挪動 — 若反序則 arr[j+1] = arr[j] 騰出前方空間
  6. ↓
  7. 4 插入正確位置 — 當不滿足反序或到頭時,將 key 置入 arr[j+1]
🔄 延伸學習:延伸學習:當資料量幾乎已排序時,插入排序的效率接近 O(n)。
🧠 記憶技巧:一拿、二比、三挪動,找到位置再放下。
⚠️ 常見陷阱:容易忽略 while 迴圈中的邊界值檢查 (j >= 0),或是在最後插入 key 時誤寫為 arr[j] 而非 arr[j+1]。
時間複雜度 O(n²) 穩定排序 (Stable Sort) 原地排序 (In-place Sort)

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

資訊系統分析設計與軟體開發基礎原理
查看更多「[資訊] 資訊管理、程式設計」的主題分類考古題