插入排序(Insertion Sort),它的概念類似於撲克牌整理,我們拿起一張牌並將它插入到已排序的牌堆中,使整堆牌仍然保持有序。
[12, 11, 13, 5, 6]
排序步驟:
arr[-1 + 1] = key;
最終排序結果:
[5, 6, 11, 12, 13]
#include <stdio.h>
// 插入排序函式
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i]; // 當前要插入的數
int j = i - 1;
// 向右移動比 key 大的元素,為 key 騰出位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j--; //繼續比較,向左遍歷已排序部分的陣列,找到合適的位置來插入 key。
}
arr[j + 1] = key; // 插入 key
}
}
// 輔助函式:列印陣列
void printArray(int arr[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
// 主程式
int main() {
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
printf("排序前: ");
printArray(arr, n);
insertionSort(arr, n);
printf("排序後: ");
printArray(arr, n);
return 0;
}