带你深入浅出新面经:七、十大排序之冒泡排序

此为面经第谈!可以关注我,每日带你深入浅出一个新面经。

我们要了解面经要如何“说”

很重要!很重要!很重要!

我们通常采取总-分-总方式来阐述!(有些知识点,你可以去了解,但是面经并不是需要全部了解的)

码农不易,各位学者学到东西请点赞支持支持

开始状态:

总:冒泡排序其实就是双循环的结果。外层循环控制要进行的遍历次数,内层循环用来比较相邻元素。

分:

最好时间复杂度就是(n)(只在外层循环遍历一次就排序完成)

最差时间复杂度就是(n²)

平均时间复杂度也是(n²)

空间复杂度:1(借用了temp临时变量)

稳定性:稳定。

冒泡排序算法的实现:

#include <iostream>
using namespace std;

void bubbleSort(int arr[], int n) {
    bool swapped;//用来表明是否交换
    //外层循环控制遍历的次数
    for (int i = 0; i < n - 1; i++) {
        swapped = false;
        // 内层循环:将最大的元素冒泡到未排序部分的末尾
        for (int j = 0; j < n - i - 1; j++) {//n-i-1减去已经排好的末尾
            if (arr[j] > arr[j + 1]) { // 从小到大排序
                // 交换相邻元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                swapped = true;
            }
        }
        // 如果在某次遍历中没有发生交换,说明数组已排序完成
        if (!swapped) break;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);//调用bubbleSort
    cout << "Sorted array: \n";
    for (int i = 0; i < n; i++)
        cout << arr[i] << " ";
    return 0;
}

冒泡排序的过程可以用以下更简洁的语句描述

  1. 开始:将数组看作一个未排序的序列。
  2. 比较相邻元素:从序列的开始,对每对相邻元素进行比较
  3. 交换:如果发现元素顺序错误(左边的大于右边的),则交换它们。
  4. 移动:完成一轮遍历后,最大的元素会“冒泡”到序列的末尾。
  5. 重复:对剩余未排序的序列重复步骤2到4
  6. 结束:当整个序列都被遍历且排序完成时,排序结束。

总:排序可视化网站(建议打开看着代码来了解)Comparison Sorting Visualization (usfca.edu)

看着排序过程来理解代码实现会更好。

冒泡排序的特点是每遍历一次,就能确保一个元素找到它的最终位置,算法简单直观,但效率相对较低。

   学习链接:https://xxetb.xetslk.com/s/3Kif2D

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值