MST

星途 面试题库

面试题:C++ 冒泡排序的优化实现

请用C++ 实现冒泡排序,并对其进行优化,减少不必要的比较次数。说明优化思路,并给出完整代码。
25.0万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

优化思路

冒泡排序的基本思想是通过相邻元素的比较和交换,将最大(或最小)的元素逐步“冒泡”到数组的末尾。原始的冒泡排序每次都要进行完整的比较,即使在数组已经部分有序的情况下。优化的思路是在每一轮比较中记录是否有元素交换,如果某一轮没有元素交换,说明数组已经有序,可以提前结束排序。

代码实现

#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;
}