資料結構系列:圖文詳解氣泡排序 & 優化
前言
本文主要講解排序演算法中最簡單的氣泡排序演算法,希望你們會喜歡。
目錄
1. 簡介
屬於 內排序演算法中 的 交換排序類別
2. 演算法思想
- 自下而上對 相鄰的2個數依次 比較 & 調整
- 若 反序 則交換,直到 無反序的記錄 為止。
較大的數往下沉,較小的數類似氣泡一樣往上冒,故稱:氣泡排序
3. 演算法示意圖
整個過程就跟冒泡一樣,最小值一直往上“冒泡”,具體如下:
a. 2與6對比:因2<6,所以交換位置
b. 2與4對比:因2<4,所以交換位置
c. 2與7對比:因2<7,所以交換位置
以此類推,最終將序列中最小值放到了首位(冒上來了)
4. 演算法實現
4.1 具體程式碼
具體請看註釋
public class BubbleSort {
/**
* 基本的 氣泡排序
*/
public static void bubbleSort(int[] srcArray) {
int i,j; // 用於存放陣列下標
int temp = 0; // 用於交換數值時臨時存放值
for(i=0;i<srcArray.length-1;i++){
// j 從後往前迴圈
for(j=srcArray.length-2;j>=i;j--){
// 若前者>後者,則交換位置
if(srcArray[j]>srcArray[j+1]){
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
}
}
}
// 輸出排序後的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
}
/**
* 執行 氣泡排序
*/
public static void main(String[] args) {
// 定義待排序數列
int[] src = new int[]{9, 1, 5, 8, 3, 7, 4, 2, 6};
// 輸出結果
bubbleSort(src);
}
}
4.2 演算法示意圖
- 當 i =0時,演算法示意圖如下:
- 當 i =1時,演算法示意圖如下:
- i = 2、3、4依次類推…
4.3 最終測試結果
1
2
3
4
5
6
7
8
9
Demo
地址
Carson_Ho的Github地址:氣泡排序
5. 演算法優化
- 簡介
- 具體實現
public class BubbleSort {
/**
* 優化的 氣泡排序
*/
public static void bubbleSortOpti(int[] srcArray) {
int i,j; // 用於存放陣列下標
int temp = 0; // 用於交換數值時臨時存放值
// 標記位
// flag = true:代表存在資料交換,即序列仍需排序,需繼續迴圈
// flag = false:代表不存在資料交換,即序列不需排序,已經是有序序列了,可停止迴圈
Boolean flag = true;
// 若flag = false時退出迴圈
for(i=0;i<srcArray.length-1 && flag;i++){
flag = false; // 初始化為false
// j 從後往前迴圈
for(j=srcArray.length-2;j>=i;j--){
// 若前者>後者,則交換位置
if(srcArray[j]>srcArray[j+1]){
temp=srcArray[j];
srcArray[j]=srcArray[j+1];
srcArray[j+1]=temp;
flag = true; // 若有資料交換,則說明序列仍未無序
}
}
}
// 輸出排序後的序列
for(int a =0;a<srcArray.length;a++)
System.out.println(srcArray[a]);
}
/**
* 執行 優化後的氣泡排序
*/
public static void main(String[] args) {
// 定義待排序數列
int[] src = new int[]{2, 1, 3, 4, 5, 6, 7, 8, 9};
// 輸出結果
bubbleSortOpti(src);
}
}
6. 效能分析
以下將分析演算法的效能:時間複雜度、空間複雜度、穩定性
7. 總結
- 本文主要講解了 排序演算法中 的氣泡排序
- 下面我將繼續講解 資料結構,有興趣可以繼續關注Carson_Ho的安卓開發筆記
相關文章
- 氣泡排序及優化詳解排序優化
- 資料結構java版之氣泡排序及優化資料結構Java排序優化
- 看圖輕鬆理解資料結構與演算法系列(氣泡排序)資料結構演算法排序
- 氣泡排序及優化排序優化
- 如何優化氣泡排序?優化排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- Java 資料結構與演算法系列之氣泡排序Java資料結構演算法排序
- 演算法與資料結構系列 ( 六 ) - 氣泡排序法- Bubble Sort演算法資料結構排序
- 圖解氣泡排序及演算法優化(Java實現)圖解排序演算法優化Java
- 氣泡排序和選擇排序詳解排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- python演算法與資料結構-氣泡排序(32)Python演算法資料結構排序
- 氣泡排序與選擇排序超詳細講解排序
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 排序——氣泡排序排序
- 氣泡排序和選擇排序流程圖排序流程圖
- Python入門小專案-氣泡排序詳解Python排序
- 氣泡排序排序
- <qsort實現一個通用的氣泡排序,排序各種型別的資料詳解>排序型別
- 經典氣泡排序的分析、優化及測試排序優化
- 排序:氣泡排序&快速排序排序
- PHP 中的氣泡排序總結PHP排序
- Python 氣泡排序Python排序
- 容器氣泡排序排序
- 氣泡排序法排序
- 氣泡排序(Java)排序Java
- 氣泡排序1排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- js氣泡排序JS排序
- JavaScript氣泡排序JavaScript排序
- 最簡單的氣泡排序還能怎麼優化?排序優化
- 資料結構:快速排序程式碼(已優化)資料結構排序優化
- 效能調優-Mysql索引資料結構詳解與索引優化MySql索引資料結構優化
- 函式氣泡排序函式排序
- 19_氣泡排序排序