杨利霞 发表于 2020-3-22 16:05

10大排序算法——01冒泡排序(Java实现)

10大排序算法——01冒泡排序(Java实现)
冒泡排序(Bubble Sort)

冒泡排序也叫起泡排序

冒泡排序的执行流程

1.从头开始比较每一对相邻元素,如果第一个比第二个大,就交换他们的位置。(执行完第一轮,最后的那个元素就是最大的元素)

2.忽略从步骤1中找到的那个最大元素,然后重复执行步骤1,直到元素有序

来看代码:        public int[] bubbleSort(int[] array ){
                for (int end = array.length; end > 0; end--) {
                        for (int begin = 1 ; begin<end ; begin++) {
                                if(array<array) {
                                        int index = array;
                                        array=array;
                                        array = index;
                                }
                        }
                }
                return array;
        }

调用一下试试
        public static void main(String[] args) {
                BubbleSort b = new BubbleSort();
                int[] array = {9,8,7,4,5,6,1,2,3};
                System.out.println("排序前");
                for (int i = 0; i < array.length; i++) {
                        if(i!=0) System.out.print(" ");
                        System.out.print(array);
                }
               
                b.bubbleSort(array);
               
                System.out.println("\n排序后");
                for (int i = 0; i < array.length; i++) {
                        if(i!=0) System.out.print(" ");
                        System.out.print(array);
                }
        }


运行结果:运行结果:
     排序前
     9 8 7 4 5 6 1 2 3
     排序后
     1 2 3 4 5 6 7 8 9

这是冒泡排序的最简单的形式,下面我们来给他优化一下。

优化冒泡排序1

优化方案: 如果序列已经完全有序,可以提前终止排序

来看代码:        public int[] bubbleSort(int[] array ){
                for (int end = array.length; end > 0; end--) {
                       
                        boolean b = true;
                       
                        for (int begin = 1 ; begin<end ; begin++) {
                                if(array<array) {
                                       
                                        int index = array;
                                        array=array;
                                        array = index;
                                       
                                        b = false;
                                }
                                if (b) break;
                        }
                }
                return array;
        }

优化代码和未优化的代码的区别就是,优化代码添加了一个boolean类型,用来判断如果在for循环一圈后,都没有触动if语句,说明这个数组已经不需要排序了。然后直接结束排序。

当然这个排序还是可以有另外一种优化方式

优化冒泡排序2

优化方案: 如果序列已经局部有序,可以记录最后一次交换的位置,减少交换次数。

来看代码:        public int[] bubbleSort(int[] array ){
                for (int end = array.length; end > 0; end--) {
                        int j = 1;
                        for (int begin = 1 ; begin<end ; begin++) {
                                if(array<array) {
                                        int index = array;
                                        array=array;
                                        array = index;
                                       
                                        j = begin;
                                       
                                }
                                end = j;
                        }
                }
                return array;
        }

优化代码和未优化的代码的区别就是,优化代码添加了一个int类型,用来判记录最后交换的位置,然后直接可以让索引指向这个位置,下一次在进行循环可以直接从这个位置作为应该索引,这个位置后面的元素就可以不去遍历。

冒泡排序属于稳定排序,为原地算法

注:本文博主学习自腾讯课堂的小码哥的“数据结构与算法”,所以如有和小码哥课程中类似方案,纯属必然!!!
原文链接:https://blog.csdn.net/qq_41242174/article/details/105006872


柠檬草lll 发表于 2020-3-26 23:59

发表回复
页: [1]
查看完整版本: 10大排序算法——01冒泡排序(Java实现)