Java冒泡排序算法优化 java冒泡排序_知乎


一、什么是冒泡排序

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

二、冒泡排序算法的思想

冒泡排序是一种稳定的排序算法。


Java冒泡排序算法优化 java冒泡排序_java冒泡排序_02


三、冒泡排序基本代码实现


public


运行结果:


Java冒泡排序算法优化 java冒泡排序_冒泡排序_03


四、冒泡排序算法优化详解

1、第一次优化(减少循环比较趟数)

从上图中的运行结果可以看出,第 3 趟排序后就已经是有序的了,可是算法还是进行了后面的排序,因此对算法进行以下的第一次优化:

增加一个标记(flag),每次发生交换,就进行标记,如果某次循环完没有标记,则说明已经完成排序,数组有序,剩下的几趟排序就不需要再去执行了,可以提前结束排序。


public


运行结果:


Java冒泡排序算法优化 java冒泡排序_Java冒泡排序算法优化_04


2、第二次优化(减少每趟循环次数)

从第一次优化后的结果可以看出,在每趟排序中,右面的许多元素已经是有序的结果了,可算法还是进行后面数值的排序,因此进行第二次优化:

定义 arrBoundary 是无序数组的边界,每次比较比到这里为止,不需要进行后面的排序了。


public


运行结果:


Java冒泡排序算法优化 java冒泡排序_java冒泡排序_05


3、第三次优化(了解)

冒泡排序里面需要交换两个元素的位置,交换两个元素可以用异或的操作,这样不需要创建第三个变量,减少内存开销。

可以对排序过程中交换两个元素的方法修改如下:


if

知乎视频www.zhihu.com


Java冒泡排序算法优化 java冒泡排序_冒泡排序_06


希望能够帮到大家,有问题的可以留言讨论哦!