冒泡排序动态图
简介
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
算法原理
冒泡排序算法的原理如下:
比较相邻的元素。如果之一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始的之一对到结尾的最后一对。在这一点上,最后的元素应该会是更大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码实现
package com.zyp.sort; import java.util.Arrays; /** * 冒泡排序 * @author zyp * @create 2022/1/20 */ public class BubbleSort { public static void main(String[] args){ //需要排序的数组 int[] array = new int[]{6,5,4,1,3,2}; //需要比较array.length-1轮 for(int i=0;i<array.length-1;i++){ //每一轮相邻的两个数比较大小 for(int j=0;j<array.length-1-i;j++){ if(array[j] > array[j+1]){ //交换位置 int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; flag = true; } } System.out.println("第"+(i+1)+"轮的结果:"+ Arrays.toString(array)); } } }
结果展示:
结果展示
代码优化
package com.zyp.sort; import java.util.Arrays; /** * 冒泡排序 * @author zyp * @create 2022/1/20 */ public class BubbleSort { public static void main(String[] args){ //需要排序的数组 int[] array = new int[]{6,5,4,1,3,2}; //需要比较array.length-1轮 for(int i=0;i<array.length-1;i++){ /** * 是否进行过交换位置 * 没有交换过位置,代表已经是排好顺序的 */ boolean flag = false; //每一轮相邻的两个数比较大小 for(int j=0;j<array.length-1-i;j++){ if(array[j] > array[j+1]){ //交换位置 int temp = array[j]; array[j] = array[j+1]; array[j+1] = temp; flag = true; } } //没有交换过位置,代表已经是排好顺序的 if(!flag){ break; } System.out.println("第"+(i+1)+"轮的结果:"+ Arrays.toString(array)); } } }
结果展示:
优化后的代码结果展示
代码分析
1.之一个for循环代表着需要比较的次数,最坏的结果是n-1次才能排好序
2.第二个for循环比较两个相邻的数,如果前面的数大于第二个数,那么将这两个数交换位置
3.第二个for循环中,判断语句为什么是array.length-1-i?因为i代表的比较次数,每次比较完之后就有一个更大值在数组的最后,所以之后的比较不需要再去比较这个值,因为这个值一定比数组的前面大
4.代码优化后,没有交换过位置,代表已经是排好顺序的,这样是为了减少比较次数