排序算法:冒泡排序(二)

分析:

  • 依次比较两个相邻的元素,将值大的元素交换到右边
  • N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数

冒泡排序的优点:

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

代码实现 

public class Test {

    public static void main(String[] args) {
        int[] arrs = {11, 15, 12, 10, 8, 5, 4, 15};
        bubbleSort (arrs);
        System.out.println (Arrays.toString (arrs));
    }

    /**
     * 冒泡排序
     *
     * @param arrs
     * @return
     */
    public static void bubbleSort(int[] arrs) {
        // 获取数组的长度
        int len = arrs.length;
        // 判断边界,为null或只存在一个数字直接返回
        if (arrs == null || len < 2) return;

        /**
         * 思想:两两比较,较大的数排右边,一轮下来可以确定数组的最后一位为最大数值
         * len - i - 1 表示每轮循环不比较已确定的数值
         */
        for (int i = 0; i < len - 1; i++) {
            for (int j = 0; j < len - i - 1; j++) {
                // 相邻两数比较,大的数组替换位置
                if (arrs[j] >= arrs[j + 1]) {
                    arrs[j] = arrs[j + 1] + arrs[j] - (arrs[j + 1] = arrs[j]);
                }
            }
        }
    }


}
  • 控制台输出:

发布了65 篇原创文章 · 获赞 66 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44096448/article/details/105092890