插入排序(Insertion Sort)是一种简单且直观的排序算法,其基本原理是将未排序的元素逐个插入到已排序部分的合适位置,直到整个数组排序完成。
以下是插入排序的基本原理:
1. 从第二个元素开始(将第一个元素视为已排序部分),将当前元素插入到已排序部分的合适位置。
2. 每次将一个未排序的元素插入到已排序部分,直到所有元素都被插入完成。
插入排序的特点:
- 插入排序是一种稳定的排序算法,相同元素的相对位置不会改变。
- 时间复杂度为 O(n^2),其中 n 是待排序数组的元素个数。在最坏情况下,即数组逆序时,插入排序的时间复杂度最高。
- 插入排序是一种原地排序算法,只需要常数级别的额外空间。
尽管插入排序的时间复杂度较高,但对于小规模数据或是接近有序的数据,插入排序通常表现良好。在实际应用中,插入排序常常用作其他高级排序算法的优化手段,例如快速排序的优化部分。
如果需要更多关于插入排序的信息或示例代码,请随时告诉我。
以下是用 C++ 实现插入排序的示例代码:
```cpp #include <iostream> void insertionSort(int arr[], int n) { for (int i = 1; i < n; i++) { int key = arr[i]; int j = i - 1; // Move elements of arr[0..i-1] that are greater than key to one position ahead of their current position while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } } void printArray(int arr[], int n) { for (int i = 0; i < n; i++) { std::cout << arr[i] << " "; } std::cout << std::endl; } int main() { int arr[] = {12, 11, 13, 5, 6}; int n = sizeof(arr) / sizeof(arr[0]); std::cout << "Original array: "; printArray(arr, n); insertionSort(arr, n); std::cout << "Sorted array: "; printArray(arr, n); return 0; } ```
在这段代码中,`insertionSort` 函数实现了插入排序算法,`printArray` 函数用于打印数组的元素,`main` 函数中定义了一个整型数组并对其进行插入排序