• 排序算法--冒泡排序


    冒泡:核心是相邻的两个数进行比较。然后量两两交换。知道没有交换,代表排序完成。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

    外循环控制着冒泡的轮数,内循环控制着每轮比较的个数

    第一轮比较:(从小到大为例)

    a[0] 和 a[1] 进行比较,若a[0] > a[1],则两两交换,再将a[1] 同 a[2] 进行比较,若a[1] > a[2] 则两两交换......同理,一直比较到a[n-2] 和 a[n-1],最终,最大的数会冒泡在数列的顶端。

    第二轮比较:

    a[0] 和 a[1] 进行比较,若a[0] > a[1],则两两交换,再将a[1] 同 a[2] 进行比较,若a[1] > a[2] 则两两交换......同理,一直比较到a[n-3] 和 a[n-2],最终,第二大的数也找出并且放在新的队列里面。

    .

    .

    .

    第n-1轮比较进行比较,比较a[0] 和 a[1],实际上在上一轮最后两个数已经比较过了。

    改进版:

    假设数组如下:

    int[] a = { 999, 1, 2, 3, 4, 5, 7, 12, 14, 16, 78 };

    在第一轮排序之后,999 已经被放置在数列的定端,也就意味着排序已经完成,但是按照上面的冒泡算法,实际上还是进行了多轮的遍历判断。

    因此,我们需要加上一个判断条件,当元素不再满足两两交换的条件的时候,意味排序完成,终止遍历。代码如下:

    在外循环里面定义一flag = false,每次两两交换之后变更为true,当不再有两两交换的时候,遍历就会break.

  • 相关阅读:
    NetBeans + Struts + Hibernate 入门教程
    The Perils of JavaSchools
    Java 2 EE 开发初体验
    五周年记
    MySQL Workbench 介绍
    JAVA语言学校的危险性
    娱乐无处不在 Sun工程师惊天发现:大吼可致硬盘潜伏期激增
    争什么?
    spring cloud使用zuul实现反向代理和负载均衡
    spring cloud 网管篇zuul
  • 原文地址:https://www.cnblogs.com/pickKnow/p/9541659.html
Copyright © 2020-2023  润新知