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 }