氣泡排序及優化

2022-01-31 20:55:11 字數 2378 閱讀 8161

1.氣泡排序定義:

氣泡排序是最簡單最容易理解的排序演算法之一,其思想是通過無序區中相鄰記錄關鍵字間的比較和位置的交換,使關鍵字最小的記錄如氣泡一般逐漸往上「漂浮」直至「水面」。
2.普通版:

/**

* 一般排序

*/private

void

bubblesort0() ;

log.i(tag, "開始--"+arrays.tostring(is));

int handlecount=0;

int swapcount=0;

for (int i=0;i)

handlecount++;}}

log.i(tag, "bubblesort0: --handlecount:"+handlecount+",swapcount:"+swapcount+"\r\n"+arrays.tostring(is));

}

2.1:輸出結果:

3.優化版:

氣泡排序過程中,可以檢測到整個序列是否已經排序完成,進而可以避免掉後續的迴圈

3.1**:

/**

* 在非最壞的情況下,氣泡排序過程中,可以檢測到整個序列是否已經排序完成,進而可以避免掉後續的迴圈:

*/private

void

bubblesort1() ;

log.i(tag, "開始--"+arrays.tostring(is));

int handlecount=0;

int swapcount=0;

for (int i=0;i)

handlecount++;

}if (!isswap)

}log.i(tag, "bubblesort1: --handlecount:"+handlecount+",swapcount:"+swapcount+"\r\n"+arrays.tostring(is));

}

3.2輸出結果:

4.再次優化版:

在每輪迴圈之後,可以確認,最後一次發生交換的位置之後的元素,都是已經排好序的,因此可以不再比較那個位置之後的元素

4.1**:

/**

* 進一步地,在每輪迴圈之後,可以確認,最後一次發生交換的位置之後的元素,都是已經排好序的,因此可以不再比較那個位置之後的元素,大幅度減少了比較的次數:

*/private

void

bubblesort2() ;

log.i(tag, "開始--"+arrays.tostring(is));

int handlecount=0;

int swapcount=0;

int n=is.length-1;

for (int i=0;i)

handlecount++;

}n=newn;

if (n==0)

}log.i(tag, "bubblesort2: --handlecount:"+handlecount+",swapcount:"+swapcount+"\r\n"+arrays.tostring(is));

}

4.2輸出結果:

5.進一步優化:

進行雙向的迴圈,正向迴圈把最大元素移動到末尾,逆向迴圈把最小元素移動到最前

5.1**:

/**

*進行雙向的迴圈,正向迴圈把最大元素移動到末尾,逆向迴圈把最小元素移動到最前

*/private

void

bubblesort3() ;

log.i(tag, "開始--"+arrays.tostring(is));

int handlecount=0;

int swapcount=0;

int endpoint=is.length-1;

int startpoint=0;

while (startpoint<=endpoint)

handlecount++;

}endpoint=newendpoint-1;//

這裡乙個元素已經沉底了,所以下一次交換次數相比於最後一次交換要少1

for (int j=endpoint;j>startpoint;j--)

handlecount++;

}startpoint=newstartpoint+1;//

} log.i(tag, "bubblesort3: --handlecount:"+handlecount+",swapcount:"+swapcount+"\r\n"+arrays.tostring(is));

}

5.2輸出結果:

氣泡排序及優化

氣泡排序的基本思路是 每次將相鄰兩個數比較,將小的調到前頭 本例按照從小到大排序 按此規律如果有n個數,則要進行n 1趟比較。在第1趟比較中要進行n 1次兩兩比較,在第 j 趟比較中要進行 n j 次兩兩比較。實現如下 include define n 10 int main for i 0 i n...

氣泡排序及優化

只考慮演算法的實現 public static void version1 int array 如果陣列的某一部分本身就是有序的,能顯著減少迴圈的趟數 public static void version2 int array if flag break 分析 我們假設在進行某趟排序時已經有序了,以...

氣泡排序及優化

目錄 一 思路 二 普通寫法 三 模板寫法 四 優化一 五 優化二 六 優化三 氣泡排序 無序區,有序區 從無序區通過交換找出最大元素放到有序區前端。1 比較相鄰元素,如果第乙個比第二個大,交換他們。2 對每一對相鄰元素做同樣操作,從開始第一對倒最後一對。這步做完後,最後的元素是最大的。3 針對所有...