繼氣泡排序和選擇排序之後,我們將探索另一種經典排序算法:插入排序。插入排序的基本思想是逐個檢視數列中的每一項,將其放入前面已排序部分的適當位置。
插入排序法簡介
插入排序法(Insertion Sort)的操作類似於玩撲克牌時對手中的牌進行排序。對於數列中的每一項,我們都會找到它在已排序部分的正確位置並插入該位置。
C++實現
以下是使用C++實現的插入排序法:
#include <iostream>
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
// 移動元素直到找到 key 的正確位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
std::cout << "Sorted array: ";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
return 0;
}
性能考慮
插入排序的平均和最壞情況時間複雜度都是 。但在近乎排序好的數列上,它的最佳情況時間複雜度可以達到 。由於這個特性,插入排序對於小型或部分排序的數據集是有效的。
在AI中的應用
雖然像插入排序這樣的基礎排序算法可能不會直接應用於AI,但在數據前處理、特徵提取和其他數據工程階段,可能會使用到它或它的變體。再者,理解這些基礎算法有助於培養良好的演算法思維,這對於解決AI中的更複雜問題至關重要。