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

    冒泡排序的思想是:每次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。比如需要将12 35 99 18 765个数从大到小排序。从大到小排序,意思是越小的越靠后面。

    首先比较第1位和第2位的大小,现在第1位是12,第2位是351235小,小的靠后,所以需要交换这两个数的位置,交换后的顺序是:

    35

    12

    99

    18

    76

    根据这个方法,继续比较第2位和第3位的大小,第2位是12,第3位是99,小的靠后,交换两个数位置后顺序如下:

    35

    99

    12

    18

    76

    接着比较第3位和第4位的大小,第312,第418。小的靠后,交换两个数以后的顺序如下:

    35

    99

    18

    12

    76

    最后比较第4位和第5位的大小,比较后的顺序如下:

    35

    99

    18

    76

    12

    经过了4次排序后最小的一个数已经出来,每次都是比较相邻的两个数,如果后面的数比前面的大,则交换两个数的位置,一直比较到最后两位数,比较完毕后最小的数就出来了,就像一个气泡一样,慢慢浮出水面。

    每将一个数归位称为一趟,经过第一趟已经找到最小的数。进行过一趟后数字的顺序如下:

    35

    99

    18

    76

    12

    接下来继续刚刚的过程,将剩下的4个数意义归位。开始第二趟,目前是将第2小的数归位。

    首先比较第1位和第2位,第1位比第2位小,小的往后放,交换以后的顺序如下:

    99

    35

    18

    76

    12

    比较第2位和第3位,第235,第318,小的已经在后面了不需交换位置,顺序如下:

    99

    35

    18

    76

    12

    比较第3位和第4位,第318,第476,小的往后,交换后顺序如下:

    99

    35

    76

    18

    12

    4位和第5位不需要进行比较了,因为第一趟已经找到最小的了,进行第二趟以后的顺序如下:

    99

    35

    76

    18

    12

    进行第三趟比较,首先比较第1位和第2位,小的已经在后面了不需要进行交换,顺序不变:

    99

    35

    76

    18

    12

    比较第2位和第3位,小的靠后,交换后的顺序如下

    99

    76

    35

    18

    12

    此时第3小的数据也出来了。

    然后进行第四趟,这里只需要比较第1位和第2位的数据,小的已经在后面了,所以不需要进行交换,因此最终顺序如下:

    99

    76

    35

    18

    12

    如果有n个数进行排序,只需要将n-1个数归位,即进行n-1趟操作即可。每一趟的操作从第1位开始进行相邻两个数的比较,较小的一个放后面,比较完成后向后挪动1位继续比较下面两个相邻数的大小,重复步骤直到最后一个尚未归位的数,已经归位的数就不需要进行比较了。

     1 package day08;
     2 
     3  
     4 
     5 public class BubbleSort {
     6 
     7     public static void main(String[] args) {
     8 
     9         int[] numbers = new int[]{12, 35, 99, 18, 76};
    10 
    11         for (int i = 0; i < numbers.length - 1; i++) {
    12 
    13             for (int j = 0; j < numbers.length - 1 - i; j++) {
    14 
    15                 if (numbers[j] > numbers[j + 1]) {
    16 
    17                     int temp = numbers[j];
    18 
    19                     numbers[j] = numbers[j + 1];
    20 
    21                     numbers[j + 1] = temp;
    22 
    23                 }
    24 
    25             }
    26 
    27         }
    28 
    29         System.out.println("排序后的数从从小到大是:");
    30 
    31         for (int i = 0; i < numbers.length; i++) {
    32 
    33             System.out.print(numbers[i]+"	");
    34 
    35         }
    36 
    37     }
    38 
    39 }

    运行结果:

     

    冒泡排序的核心是双重嵌套循环,它的时间复杂度是ON2),和桶排序相比是节省了空间,但是时间复杂度非常高。

    欢迎批评指正,提出问题,谢谢!
  • 相关阅读:
    Jenkins系列之二——centos 6.9 + JenKins 安装
    查看linux系统是运行在物理机还是虚拟机方法
    Java 的不可变类 (IMMUTABLE CLASS) 和 可变类 (MUTABLE CLASS)
    Java中的mutable和immutable对象实例讲解
    理解Java中的引用传递和值传递
    深入理解Java中的Clone与深拷贝和浅拷贝
    java Clone使用方法详解
    Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
    赏美-第[001]期-20190504
    赏美-第[000]期
  • 原文地址:https://www.cnblogs.com/xxeleanor/p/14405782.html
Copyright © 2011-2022 走看看