面试题答案
一键面试优化思路
冒泡排序的基本思想是通过相邻元素的比较和交换,将最大(或最小)的元素逐步“冒泡”到数组的末尾。原始的冒泡排序每次都要进行完整的比较,即使在数组已经部分有序的情况下。优化的思路是在每一轮比较中记录是否有元素交换,如果某一轮没有元素交换,说明数组已经有序,可以提前结束排序。
代码实现
#include <iostream>
#include <vector>
void optimizedBubbleSort(std::vector<int>& arr) {
int n = arr.size();
for (int i = 0; i < n - 1; ++i) {
bool swapped = false;
for (int j = 0; j < n - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
std::swap(arr[j], arr[j + 1]);
swapped = true;
}
}
if (!swapped) {
break;
}
}
}
int main() {
std::vector<int> arr = {64, 34, 25, 12, 22, 11, 90};
optimizedBubbleSort(arr);
std::cout << "排序后的数组: ";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}