冒泡排序,在某些场景下优化后快了几十倍!

喜欢互联网技术的同学,一定要关注我哦!

可以先去看一下关于排序的相关概念哦

传送门:《 》

冒泡排序是交换排序的一种,同时也是排序算法中很简单的一种。

冒泡排序的原理

比较相邻两个元素,若第一个比第二个大,则交换,直到没有!

图解冒泡排序

冒泡排序

从上图的运行原理,我们知道,

首先在第一趟比较的时候,7跟5、6、4、3分别比较了一次,最后7是最大的,所以放在最后。

在第二趟比较的时候,5跟6比,然后不变位置,6跟4比,然后4和6交换,6跟3比,然后6和3交换,最后6放在最后。

在第三趟比较的时候,5和4比,交换位置,5和3比,交换位置,最后5放在最后。

在第三趟比较的时候,4和3比,交换位置,最后4放在最后。

最后比较完成。

JAVA实现冒泡排序

执行结果

为了方便测试,我随机生成了一个又8个元素组成的数组,然后在main函数里面,调用bubbleSort方法

可以明显看出,测试的结果,和我上面给到的图解是一模一样的过程!可见测试成功了!

经典冒泡排序优化

可以看见上面的代码,无论怎样都要执行N的平方次,尽管数据已经基本有序的时候,上面的冒泡还是进行两两比较,这样在少数数据的时候,看不出什么效果,但是当数据量大的时候,就会很费功夫了。所以有了下面的优化:

通过一个flag来判断是否有序,当已经有序的时候,不进行交换,直接退出循环。

测试

我使用了一个完全有序的数组,然后分别运行两个方法,可见耗时差别之大!

正常随机的结果:和原来的差别不大。

完全有序的结果:碾压没优化的代码。

在优化后的代码,最好情况下,待排序记录序列为正序,这样算法只进行了n-1次比较,不需要移动数据,时间复杂度为O(n)。

下次将会有更精彩的内容哦,感兴趣的同学一定要关注哦!