冒泡排序算法


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 }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM