这是我参与8月更文挑战的第2天,活动详情查看:8月更文挑战
想要坚持写点什么,那干脆写一个系列吧。想想有什么可以写的呢?程序=算法+数据结构,可见算法的重要性。这个系列老诗力求用最简单的语言把算法讲得明明白白,由浅到深,有兴趣的话,可以关注一下专栏。
在面试中,经常会考到冒泡排序算法,而且还是让你现场手写的那种。对于初入职场的同学们一定要在这一方面做好准备。
冒泡算法描述
冒泡算法它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。最终排完一次的结果是将最大/最小的数字放到底部。
冒泡图解
就像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)。冒泡排序是就地排序,且它是稳定的。
想要学习更多算法问题,或者要更多项目源码,请移步到公众号:诗一样的代码。
既然进来了,原创不易。小伙伴点个赞再走呗。