冒泡排序,Java中的经常算法,它是如何实现的呢?

Posted 老猫码坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序,Java中的经常算法,它是如何实现的呢?相关的知识,希望对你有一定的参考价值。

冒泡算法原理:冒泡算法就是依次比较数组中相邻的两个元素,如果左边比右边大则进行调换,以此类推,这样第一次排序就把最大的元素放在最底下

举例说明:要排序数组:int[] arr = {7, 2, 6, 5, 9, 4};

第1轮排序前数组为:[7, 2, 6, 5, 9, 4]

第1轮第1次比较:7大于2交换位置:[2, 7, 6, 5, 9, 4]

第1轮第2次比较:7大于6交换位置:[2, 6, 7, 5, 9, 4]

第1轮第3次比较:7大于5交换位置:[2, 6, 5, 7, 9, 4]

第1轮第4次比较:7小于9不交换位置:[2, 6, 5, 7, 9, 4]

第1轮第5次比较:9大于4交换位置:[2, 6, 5, 7, 4, 9]

第1轮排序后数组为:[2, 6, 5, 7, 4, 9]

第2轮排序前数组为:[2, 6, 5, 7, 4, 9]

第2轮第1次比较:2小于6不交换位置:[2, 6, 5, 7, 4, 9]

第2轮第2次比较:6大于5交换位置:[2, 5, 6, 7, 4, 9]

第2轮第3次比较:6小于7不交换位置:[2, 5, 6, 7, 4, 9]

第2轮第4次比较:7大于4交换位置:[2, 5, 6, 4, 7, 9]

第2轮排序后数组为:[2, 5, 6, 4, 7, 9]

第3轮排序前数组为:[2, 5, 6, 4, 7, 9]

第3轮第1次比较:2小于5不交换位置:[2, 5, 6, 4, 7, 9]

第3轮第2次比较:5小于6不交换位置:[2, 5, 6, 4, 7, 9]

第3轮第3次比较:6大于4交换位置:[2, 5, 4, 6, 7, 9]

第3轮排序后数组为:[2, 5, 4, 6, 7, 9]

第4轮排序前数组为:[2, 5, 4, 6, 7, 9]

第4轮第1次比较:2小于5不交换位置:[2, 5, 4, 6, 7, 9]

第4轮第2次比较:5大于4交换位置:[2, 4, 5, 6, 7, 9]

第4轮排序后数组为:[2, 4, 5, 6, 7, 9]

第5轮排序前数组为:[2, 4, 5, 6, 7, 9]

第5轮第1次比较:2小于4不交换位置:[2, 4, 5, 6, 7, 9]

第5轮排序后数组为:[2, 4, 5, 6, 7, 9]

已排序后的数组为:[2, 4, 5, 6, 7, 9]

由此可见:N个数字要排序完成,总共进行N-1轮排序,每i轮的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数,即

for(int i=0;i<arr.length-1;i++){

for(int j=0;j<arr.length-i-1;j++){

//交换位置

}

冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。如上例:第一轮比较之后,排在最后的一个数一定是最大的一个数,第二轮排序的时候,只需要比较除了最后一个数以外的其他的数,同样也能找出一个最大的数排在参与第二轮比较的数后面,第三轮比较的时候,只需要比较除了最后两个数以外的其他的数,以此类推……也就是说,每进行一轮比较,每一轮少比较一次,一定程度上减少了算法的量。

因此冒泡排序总的时间复杂度为O(n*n)

代码例子:

欢迎关注老猫码坊,与老猫一起了解更多互联网科技和编程知识。

以上是关于冒泡排序,Java中的经常算法,它是如何实现的呢?的主要内容,如果未能解决你的问题,请参考以下文章

66. 冒泡排序如何实现?如何优化?

Java中的几种排序算法

Java数据结构和算法——冒泡选择插入排序算法

冒泡排序java

Java数据结构和算法——冒泡选择插入排序算法

javascript中的冒泡排序法