排序算法之冒泡排序

一、原理

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点上,最后的元素即是最大的数。

3、针对所有元素重复以上的步骤,除了最后一个。

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

二、代码实现

package com.jdk8.SortTest;

public class BubbleSort {
    public static void main(String[] args){
        int[] params = new int[]{1,9,5,2,7,4,3,8};
        System.out.println("排序前的数据为:");
        display(params);
        bubbleSorted(params);
        System.out.println("排序后的数据为:");
        display(params);
    }

    public static void display(int[] arrays){
        for(int i = 0;i < arrays.length;i++){
            System.out.print(" " +  arrays[i] + " ");
        }
    }

    private static void bubbleSorted(int[] params) {
        if(null == params || params.length < 1){
            return ;
        }
        int param = 0;
        for(int i = 0;i < params.length;i++){
            for(int j = i + 1;j < params.length;j++){
                if(params[i] > params[j]){
                    param =  params[i];
                    params[i] = params[j];
                    params[j] = param;
                }
            }
        }
        System.out.println();
    }
}

运行结果如下:

排序前的数据为:
 1  9  5  2  7  4  3  8 
排序后的数据为:
 1  2  3  4  5  7  8  9 

三、复杂度分析

3.1、时间复杂度分析

​ 时间复杂度:时间复杂度是一个函数,定量描述了算法的运算时间,用大O符号来表示。在计算的时候,先找算法基本操作的执行次数,即为T(n),然后找到它的数量级,为f(n),如果T(n)与f(n)的比值求极限可得到一个常数c,则时间复杂度T(n) = O(f(n))。

​ 分析:冒泡排序,可以分为以下三个规则的组合:

​ 1) 外层for循环。

​ 2) 内层for循环。

​ 3) 判断比较和交换位置。

​ 因此,冒泡排序的时间复杂度为:O(n) * O(n) * O(1) = O(n^2) 。

3.2 、空间负责度

​ 空间复杂度:空间复杂度是运行完一个程序所需要的内存的大小。即包括了存储算法本身所需要的空间,输入与输出数据所占空间,以及一些临时变量所占用的空间。一般而言,只比较额外空间,来比较算法的空间优越性。

​ 冒泡排序的临时变量所占用的空间不随处理数据n的大小改变而改变,即空间复杂度为O(1)。

四、稳定性

​ 冒泡排序是稳定排序。

原文地址:https://www.cnblogs.com/ITBlock/p/10349364.html