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 }