常用排序算法专题—冒泡排序

作者: 9f5e612a0d44 | 来源:发表于2019-03-18 22:36 被阅读319次

    冒泡排序

      冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。所以,如果两个元素相等,是不会再交换的;如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

    • 基本思路

      我们假设有一个含有6个元素的int型的一维数组变量,他们分别是 2,7,8,9,6,4,我们对它们进行冒泡排序:

      我们首先对前6个元素进行第一轮排序:
    对比第0个元素和第1个元素,即2和7,因为2<7,不进行操作;
    对比第1个元素和第2个元素,即7和8,因为7<8,不进行操作;
    对比第2个元素和第3个元素,即8和9,因为8<9,不进行操作;
    对比第3个元素和第4个元素,即9和6,因为9>6,交换;
    现在数组序列 2,7,8,6,9,4;
    对比第4个元素和第5个元素,即9和4,因为9>4,交换;
    现在数组序列 2,7,8,6,4,9;

      此时我们发现前6个数据的最大值‘9’已经“浮出”水面,我们下一步可以将前5个数据进行第二轮排序,让前5个数据的最大值“浮出”到倒数第二个位置。

      我们再对前5个元素进行第二轮排序:
    对比第0个元素和第1个元素,即2和7,因为2<7,不进行操作;
    对比第1个元素和第2个元素,即7和8,因为7<8,不进行操作;
    对比第2个元素和第3个元素,即8和6,因为8>6,交换;
    现在数组序列 2,7,6,8,4,9;
    对比第3个元素和第4个元素,即8和4,因为8>4,交换;
    现在数组序列 2,7,6,4,8,9; 停止

      此时我们发现前5个数据的最大值‘8’已经“浮出”到倒数第二个位置,我们下一步可以将前4个数据进行第三轮排序,让前4个数据的最大值“浮出”到倒数第三个位置。通过这种方法,以此类推,即可完成排序。

    • JAVA 代码如下:
    package DataStructure;
    
    public class BubbleSort {
        public static void sort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - 1 - i; j++)
                    if (arr[j] > arr[j + 1]) {
                        int temp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = temp;
                    }
            }
        }
    
        public static void main(String[] args) {
            int[] arr = { 2, 7, 8, 9, 6, 4 };
            sort(arr);
            for (int n : arr)
                System.out.print(n + " ");
        }
    
    }
    
    • 时间复杂度

      若文件的初始状态是正序的,一趟扫描即可完成排序(需要优化代码)。冒泡排序最好的时间复杂度为 O(n)。
      冒泡排序的最坏时间复杂度为 O(n²)。
      综上,因此冒泡排序总的平均时间复杂度为 O(n²)。

    相关文章

      网友评论

        本文标题:常用排序算法专题—冒泡排序

        本文链接:https://www.haomeiwen.com/subject/fovimqtx.html