【面试算法】冒泡排序详解| 8月更文挑战

365 阅读2分钟

这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战

想要坚持写点什么,那干脆写一个系列吧。想想有什么可以写的呢?程序=算法+数据结构,可见算法的重要性。这个系列老诗力求用最简单的语言把算法讲得明明白白,由浅到深,有兴趣的话,可以关注一下专栏。

在面试中,经常会考到冒泡排序算法,而且还是让你现场手写的那种。对于初入职场的同学们一定要在这一方面做好准备。

冒泡算法描述

冒泡算法它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。最终排完一次的结果是将最大/最小的数字放到底部。

冒泡图解

@YKCD{AR7D~R56K$Z6RF5F2.png

就像85420这一个序列。 一开始排的是第1和第2位,然后是第2和第3位,再然后第4和第5位.... 排完一遍之后8这个最大数是在底部的。剩下的我们需要重复排5420这个序列就好了。

冒泡代码实现

#include <iostream>
using namespace std;
template<typename T>
//整数或浮点数皆可使用
void bubble_sort(T arr[], int len)
{
    int i, j;  T temp;
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)
        if (arr[j] > arr[j + 1])
        {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
}
int main()
{
    int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };
    int len = (int) sizeof(arr) / sizeof(*arr);
    bubble_sort(arr, len);
    for (int i = 0; i < len; i++)
        cout << arr[i] << ' ';
    cout << endl;
    return 0;
}

上面代码是由c++实现的冒泡排序。我们并不需要背下来去面试。我们只需要知道原理,就能简单地将它写出来。

时间复杂度

冒泡排序最好的时间复杂度为 O(n)。冒泡排序的最坏时间复杂度为 O(n2)。冒泡排序是就地排序,且它是稳定的。

想要学习更多算法问题,或者要更多项目源码,请移步到公众号:诗一样的代码

既然进来了,原创不易。小伙伴点个赞再走呗