冒泡排序

Posted

Catch Spark. Code

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。

Code

package kb.algorithm;

public class BubbleSort {

    public static void main(String[] args) {
        int[] a = new int[]{3, 6, 4, 9, 1, 7, 2, 5};
        sort(a);
        StringBuilder sb=new StringBuilder(20);
        for (int i = 0; i < a.length; i++) {
           sb.append(a[i]);
           sb.append(",");
        }
        System.out.println(sb);
    }

    public static void sort(int[] a) {
        int size = a.length;
        for (int i = 0; i < size; i++) {
            for (int j = 0; j < size - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }
    }
}

执行结果

1,2,3,4,5,6,7,9,

分析改进

每次找出最大的一个元素移到最右边。

代码需要排序10次,当时上面的过程可以看到只需要5次即可完成这个排序,这是一个优化点,当内循环的执行完一次排序后如果没有发生数据交换(本例中的第五次),则说明整个列表已经全部排序排序完成了。

对上面的代码做一个改进。

package kb.algorithm;

public class BubbleSort {

    public static void main(String[] args) {
        int[] a = new int[]{3, 6, 4, 9, 1, 7, 2, 5};
        sort(a);
        StringBuilder sb = new StringBuilder(20);
        for (int i = 0; i < a.length; i++) {
            sb.append(a[i]);
            sb.append(",");
        }
        System.out.println(sb);
    }

    public static void sort(int[] a) {
        int size = a.length;
        int executedCount = 0;
        for (int i = 0; i < size; i++) {
            boolean switched = false;
            for (int j = 0; j < size - i - 1; j++) {
                if (a[j] > a[j + 1]) {
                    int temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                    switched = true;
                }
            }
            executedCount++;
            if (!switched) {
                break;
            }
        }
        System.out.println("executedCount" + executedCount);
    }
}

执行结果

executedCount6
1,2,3,4,5,6,7,9,

复杂度分析

时间复杂度O(n^2)。空间复杂度O(1)。

属于稳定性排序,当两个数字相同的时候,其位置是不会发生改变的。

以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

java冒泡排序法代码

python代码实现鸡尾酒排序(双向冒泡排序)

冒泡排序python代码

视频+图文+动画详解冒泡排序

交换排序(冒泡排序快速排序的算法思想及代码实现)

C语言冒泡排序。