此为面经第九谈!可以关注我,每日带你深入浅出一个新面经。
我们要了解面经要如何“说”!
很重要!很重要!很重要!
我们通常采取总-分-总方式来阐述!(有些知识点,你可以去了解,但是面经并不是需要全部了解的)
码农不易,各位学者学到东西请点赞支持支持!
开始部分:
总:插入排序有一个有序表,每次添加一个新元素进来进行内部排序。
分:
最好时间复杂度就是(n)(只在外层循环遍历一次就排序完成)
最差时间复杂度就是(n²)
平均时间复杂度也是(n²)
空间复杂度:1(借用了key和j临时变量)
稳定性:稳定。
插入排序算法的实现:
#include <iostream>
using namespace std;
void insertionSort(int arr[], int n) {
for (int i = 1; i < n; i++) { // 从第二个元素开始
int key = arr[i]; // 记录当前要插入的元素
int j = i - 1;
// 在已排序的部分中寻找插入的位置
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j]; // 将大于key的元素向后移动
j--;//向后遍历
}
arr[j + 1] = key; // 插入到正确的位置
}
}
int main() {
int arr[] = {12, 11, 13, 5, 6};
int n = sizeof(arr)/sizeof(arr[0]);
insertionSort(arr, n);
cout << "Sorted array: \n";
for (int i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
return 0;
}
插入排序的过程可以用以下简单语句描述:
- 构建有序序列:从数组的第一个元素开始,将其视为一个有序序列。
- 选择待排序元素:取出下一个元素,与有序序列中的元素进行比较。
- 插入元素:将待排序元素插入到有序序列的正确位置,保持序列的有序性。
- 重复操作:对数组中的每个元素重复步骤2和3,直到所有元素都被插入有序序列。
- 完成排序:当所有元素都被插入有序序列时,整个数组便完成了排序。
总: 排序可视化网站(建议打开看着代码来了解)Comparison Sorting Visualization (usfca.edu)
看着排序过程来理解代码实现会更好。
简而言之,插入排序通过逐步构建有序序列,并将剩余元素插入到其在序列中的适当位置来实现排序。