博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法大神之路----排序(冒泡排序法)
阅读量:5217 次
发布时间:2019-06-14

本文共 1840 字,大约阅读时间需要 6 分钟。

冒泡排序法

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

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

冒泡排序法分析

  1. 冒泡排序法平均情况下,需要比较(n-1)/2次,时间复杂度为O(n
    2),最好的情况只需要扫描一次,不用操作,即作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]+"\t");        }        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放到倒数第二个数
  • ...
  • 最后当第四次扫描的时候,已经排好序.最差情况下需要扫描"数组元素"次,一般,想要优化的话,即在程序中设置,当扫描到已经符合要求后,就直接停止扫描即可

转载于:https://www.cnblogs.com/wangxinblog/p/7341792.html

你可能感兴趣的文章
决策树在机器学习的理论学习与实践
查看>>
Biee 11g权限详解
查看>>
minggw 安装
查看>>
Jquery操作cookie,实现简单的记住用户名的操作
查看>>
[BZOJ1196][HNOI2006]公路修建问题 二分答案+最小生成树
查看>>
PHP基础入门(二)
查看>>
[Luogu P3119] [USACO15JAN]草鉴定Grass Cownoisseur (缩点+图上DP)
查看>>
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
18款在线代码片段测试工具
查看>>
20.C++- &&,||逻辑重载操作符的缺陷、,逗号重载操作符的分析
查看>>
静态变量数组实现LRU算法
查看>>
在SQL中怎么把一列字符串拆分为多列
查看>>
中文系统 上传file的input显示英文
查看>>
css样式写一个三角形
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
javascript获取textarea中所选文本的开始位置、结束位置和选择的文本
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
事务备份还原分离附加
查看>>
JSch - Java实现的SFTP(文件上传详解篇)
查看>>