前面我們提到氣泡排序的標準版,下面我們來對氣泡排序進行優化。
為什麼要進行優化呢?
首先,我們要知道,氣泡排序用的是相連兩個之間的比較。
而最外層的迴圈次數是陣列的長度-1,
那麼,有沒有不用全部迴圈結束,就能排好序呢?
這種情況是有的,
比如,我們需要排序的序列是
也就是說,除了第一和第二元素之外,別的都是正常的排序。
當i=1 時,交換了2和1,此時序列已經有序,
但是演算法依然將最外層迴圈從i=2到9,已經每個迴圈中的迴圈都要執行一遍,
儘管沒有交換資料,但是之後的操作還是大大的多餘了。
為此,我們可以設定乙個標記,來改進這一演算法:
void bubble2(sqlist *l)}}}
**改動的關鍵就是在i變數的for迴圈中,增加了對flag是否為true的判斷,經過這樣的改進,氣泡排序在效能上就有了一些提公升,可以避免因已經有序的情況下的無意義的迴圈判斷。
氣泡排序優化版
優化 因為排序過程中,各元素不斷接近自己的位置如果一趟比較下來沒有進行交換,就說明序列有序,因此要在排序過程中設定乙個標誌flag判斷元素是否進行過交換。從而減少不必要的比較。實現 int arr int t 0 中間變數 boolean flag false 標誌當前迴圈是不是一次也沒進行交換,沒...
氣泡排序演算法(優化版)
include include include 排序用到的結構和函式 define maxsize 20 typedef struct sqlist 交換l中陣列r的下標為i和j的值 void swap sqlist l,int i,int j 氣泡排序 優化版 void bubblesort sq...
氣泡排序和選擇排序優化版
沒按方法來寫 主要是思想 用 來交換陣列更好 x x y y x y x x y 冒泡 public class bubblesort 六個數 只需五次大迴圈 確定五個數的排序 for int i 0 i arr.length 1 i system.out.println arrays.tostri...