zoukankan      html  css  js  c++  java
  • 排序算法之冒泡排序

    一、原理

    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)。

    四、稳定性

    ​ 冒泡排序是稳定排序。

  • 相关阅读:
    web应用/http协议/web框架
    算法-排序-1.冒泡排序/2.选择排序/3.插入排序
    算法-基础和查找-1.汉诺塔/2.顺序查找/3.二分查找/4.顺序查找和二分查找的比较
    前端开发
    前端开发
    前端开发
    前端开发
    数据库
    LeetCode : Add Binary
    LeetCode : Length of Last Word
  • 原文地址:https://www.cnblogs.com/ITBlock/p/10349364.html
Copyright © 2011-2022 走看看