此为面经第八谈!可以关注我,每日带你深入浅出一个新面经。
我们要了解面经要如何“说”!
很重要!很重要!很重要!
我们通常采取总-分-总方式来阐述!(有些知识点,你可以去了解,但是面经并不是需要全部了解的)
码农不易,各位学者学到东西请点赞支持支持!
开始部分:
总:简单选择排序其实就是每一轮从待排序列中选择最小的元素,将其放到序列的开头。
分:
最好时间复杂度就是(n²)(只在外层循环遍历一次就排序完成)
最差时间复杂度就是(n²)
平均时间复杂度也是(n²)
空间复杂度:1(借用了temp临时变量、min最小值变量)
稳定性:不稳定。
简单选择排序算法的实现:
#include <iostream>
using namespace std;
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {//i 从 0 开始,一直迭代到 n-2,因为在最后一轮时,剩下的部分中只有一个元素,它已经是最大的元素,无需再比较。
// 假设当前元素为最小值
int minIndex = i;
// 寻找最小元素的索引
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
// 交换当前元素和找到的最小元素
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
int main() {
int arr[] = {64, 25, 12, 22, 11};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
cout << "Sorted array: \n";
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
}
简单选择排序的过程可以简洁地概括为:
- 寻找最小值:在未排序的部分,找到最小元素。
- 交换位置:将找到的最小值与未排序部分的第一个元素交换位置。
- 移动边界:将未排序部分的边界向后移动一位,排除已排序的最小值。
- 重复过程:对剩余的未排序部分重复步骤1到3。
- 结束排序:当未排序部分缩小到一个元素或为空时,排序完成。
总: 排序可视化网站(建议打开看着代码来了解)Comparison Sorting Visualization (usfca.edu)
看着排序过程来理解代码实现会更好。
简单来说,简单选择排序通过不断选择剩余元素中的最小值并将其放到序列的前端来工作,直到整个序列被排序。