• 算法大神之路----排序(冒泡排序法)


    冒泡排序法

    冒泡排序法又称为交换排序法,是由观察水中冒泡变化构思而成,气泡随着水深压力而改变.气泡在水底时,水压最大,气泡最小,而气泡慢慢浮上水面时,气泡所受压力最小,体积慢慢变大.

    冒泡排序比较方式是从第一个元素开始,比较相邻的元素大小,如果大小顺序有误,则对调后进行下一个元素比较.直到所有元素满足关系为止.

    冒泡排序法分析

    1. 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n2),最好的情况只需要扫描一次,不用操作,即作n-1次比较,时间复杂度为O(n).
    2. 由于冒泡排序为相邻两者相互比较对调,并不会改变其原本排列的顺序,所以是稳定的排序法
    3. 只需要一个额外的空间,所以空间复杂度最佳
    4. 这个排序法适用于数据量小,或者有部分数据已经排序过的情况

    代码示例:

    import java.util.Random;
    
    /**
     * 算法大神之路----排序(冒泡排序法)
     */
    public class Study01 {
    
        public static void main(String[] args) {
    
            //新建一个数组
            int[] arr = new int[6];
            Random r = new Random();
            for (int i = 0; i < arr.length; i++) {
            //使用随机数给数组赋值
                arr[i] = r.nextInt(50);
            }
            System.out.print("原数组为:");
            paint(arr);
            System.out.println("-----排序-----");
    
            //使用冒泡排序法进行排序,最差情况下
            for (int i = arr.length-1; i >=0; i--) {
                //比较当前数和后一个数,谁大,谁放后面
                for (int j = 0; j < i; j++) {
                    if(arr[j]>arr[j+1]){
                        int temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                    }
                }
                System.out.print("扫描第"+(arr.length-i)+"次结果为:");
                paint(arr);
            }
    
        }
    
        public static void paint(int[] arr){
            for (int i = 0; i < arr.length; i++) {
                System.out.print(arr[i]+"	");
            }
            System.out.println();
        }
    
    }

    结果:

    原数组为:34    41    24    36    15    21    
    -----排序-----
    扫描第1次结果为:34    24    36    15    21    41    
    扫描第2次结果为:24    34    15    21    36    41    
    扫描第3次结果为:24    15    21    34    36    41    
    扫描第4次结果为:15    21    24    34    36    41    
    扫描第5次结果为:15    21    24    34    36    41    
    扫描第6次结果为:15    21    24    34    36    41

    可见:

    • 第一次扫描时候,把第二个数41一直比较到后面去了
    • 第二次扫描则是比较了,把36放到倒数第二个数
    • ...
    • 最后当第四次扫描的时候,已经排好序.最差情况下需要扫描"数组元素"次,一般,想要优化的话,即在程序中设置,当扫描到已经符合要求后,就直接停止扫描即可
  • 相关阅读:
    读书笔记——高效能人士的七个习惯3
    读书笔记——高效能人士的七个习惯2(四类优先级)
    读书笔记——高效能人士的七个习惯1
    任正非最新谈话:吉田社长
    罗辑思维CEO脱不花:关于工作和成长,这是我的121条具体建议
    不需注释的生命
    读书笔记:《尽管去做——无压工作的艺术》摘抄
    C语言中变量名及函数名的命名规则与驼峰命名法
    回车”(carriage return)和”换行”(line feed)的区别和来历-(附:ASCII表)
    printf输出格式总结
  • 原文地址:https://www.cnblogs.com/wangxinblog/p/7341792.html
Copyright © 2020-2023  润新知