Java常见排序算法之冒泡排序详解

一、简介

Java中有几种常用的排序算法,比如冒泡排序、二分查找法排序、选择排序等等,本文将对冒泡排序做一个详细的讲解。冒泡排序,主要是比较两个相邻的元素,将值大的元素交换至右端。(假设从小到大排序) 。 每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。

二、排序思路 

排序思路:(假设从小到大排序)

【1】、比较相邻的元素。如果第一个比第二个大(小),那么交换两者的位置。

【2】、对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。一趟排完后,最后的元素会是最大的数。

【3】、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

【4】、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较。

三、算法实现

/**
 * @Title: BubblingSortUtils
 * @ProjectName java_sort
 * @Description: 冒泡排序工具类
 * @Author WeiShiHuai
 * @Date 2018/10/15 14:14
 * <p>
 * 排序算法: 比较两个相邻的元素,将值大的元素交换至右端。(假设从小到大排序)
 * 每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值
 * <p>
 * <p>
 * 排序思路:(假设从小到大排序)
 * 1、比较相邻的元素。如果第一个比第二个大(小),那么交换两者的位置。
 * 2、对每一对相邻元素作同样的操作,从开始第一对到结尾的最后一对。一趟排完后,最后的元素会是最大的数。
 * 3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。
 * 4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较。
 */
public class BubblingSortUtils {

    /**
     * 冒泡排序工具类
     *
     * @param array 待排序数组
     * @return 排序后的数组
     */
    public static int[] sort(int[] array) {
        int length = array.length - 1;
        //外循环控制总共需要多少趟
        for (int i = 0; i < length; i++) {
            //内层循环控制每一趟比较的次数
            for (int j = 0; j < length - i; j++) {
                //后一个比前一个的值大,则交换位置
                if (array[j] > array[j + 1]) {
                    //使用中间值进行交换
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
        return array;
    }

}

测试:

public class Test {

    public static void main(String[] args) {
        int[] array = {5, 6, 3, 7, 2, 1};
        System.out.println("排序前: " + Arrays.toString(array));
        int[] arr = BubblingSortUtils.sort(array);
        System.out.println("排序后: " + Arrays.toString(arr));
    }

}

测试结果:

 

四、原理分析

下图是对冒泡排序算法每一步排序的理解以及交换思路:

五、总结

本文是作者在复习冒泡排序算法的一些总结以及思路,仅供大家参考学习,一起学习一起进步。

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/83064843