冒泡排序,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中的经常算法,它是如何实现的呢?的主要内容,如果未能解决你的问题,请参考以下文章