• 冒泡排序算法


    1、冒泡排序算法的介绍

      冒泡排序算法实现原理非常简单,就是比较相邻的两个元素,将较大或者较小的元素移动到右端,这样循环遍历n-1趟就能把一列数据变得有序。

    2、冒泡排序算法的特点

      依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

       第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较;

      第二趟比较完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较;

      依次类推,每一趟比较次数-1;

      ……

    3、冒泡排序算法的性能分析

    (1)时间复杂度

      冒泡排序算法的最坏情况、最优情况、平均情况下的时间复杂度都是O(n^2)

    (2)空间复杂度

       空间复杂度就是在交换元素时那个临时变量所占的内存空间;最优的空间复杂度就是开始元素顺序已经排好了,则空间复杂度为:O(1);最差的空间复杂度就是开始元素逆序排序了,则空间复杂度为:O(n);平均的空间复杂度为:O(1);

    4、冒泡排序算法的代码实现

     1 package com.baozi.paixu;
     2 
     3 import java.util.Arrays;
     4 
     5 /**
     6  * 冒泡排序算法:
     7  * 顾名思义就是排序时,最大的元素会如同气泡一样移至右端,其利用比较相邻元素的方法,将大的元素交换至右端
     8  * 所以大的元素会不断的往右移动,直到适当的位置为止。
     9  * 基本的气泡排序法可以利用旗标的方式稍微减少一些比较的时间,当寻访完阵列后都没有发生任何的交换动作,表示
    10  * 排序已经完成,而无需再进行之后的回圈比较与交换动作。
    11  *
    12  * @author BaoZi
    13  * @create 2019-05-15-16:34
    14  */
    15 public class BubbleSort {
    16     public static void main(String[] args) {
    17         final int MAX = 5;
    18         int[] nums = new int[MAX];
    19         System.out.println("...............使用的是冒泡排序算法...............");
    20         for (int i = 0; i < MAX; i++) {
    21             nums[i] = (int) (Math.random() * 10 + 5);
    22         }
    23         System.out.println("排序之前的数组为...............");
    24         System.out.println(Arrays.toString(nums));
    25         System.out.println("排序之后的数组为...............");
    26         //使用选择排序算法进行排序:
    27         BubbleSort.bubbleSort(nums);
    28         System.out.println(Arrays.toString(nums));
    29     }
    30 
    31     public static void bubbleSort(int[] nums) {
    32         boolean flag = true;
    33         //冒泡排序一共进行了nums.length-1次,因为最后一次排序之后剩下的那个元素自动就是有序的
    34         //外层循环控制循环的次数
    35         for (int i = 1; i < nums.length && flag == true; i++) {
    36             flag = false;
    37             //每次遍历都要从第一个元素开始比较
    38             //内层循环控制每一趟比较排序多少次
    39             for (int j = 0; j < nums.length - i; j++) {
    40                 if (nums[j] > nums[j + 1]) {
    41                     int temp = nums[j];
    42                     nums[j] = nums[j + 1];
    43                     nums[j + 1] = temp;
    44                     flag = true;
    45                 }
    46             }
    47         }
    48     }
    49 }
  • 相关阅读:
    Eclipse在线安装spring-tool-suit插件
    使用Eclipse构建Maven项目
    uwsgi+flask环境中安装matplotlib
    开启flask调试
    linux进入软连接所指向的原目录
    eclipse打不开,报错 "java was started with exit code=13"
    gnuplot 的安装
    使用tcp_probe时最初没有输出,先卸载后加载模块之后就有了。
    一个简单的socket程序运行与抓包查看
    如何查看文件是dos格式还是unix格式的?
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10930978.html
Copyright © 2020-2023  润新知