冒泡排序算法


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