經典氣泡排序的分析、優化及測試
經典氣泡排序的分析、優化及測試
1.氣泡排序的過程
int arr[] = {3,9,-1,-10,-2};
假設對arr這個陣列進行排序,
第一輪:
(1)3和9進行比較,3不大於9,3和9的位置不交換
(2)9和-1進行比較,9大於-1,9和-1交換位置,陣列變為
{3,-1,9,-10,-2}
(3)9和-10進行比較,9大於-10,9和-10交換位置,陣列變為
{3,-1,-10,9,-2}
(4)9和-2進行比較,9大於-2,9和-2交換位置,陣列變為
{3,-1,-10,-2,9}
通過這一段流程可以得出兩點:
1.氣泡排序時,是拿陣列的每一個元素與這個元素的下一個元素進行比較,如果這個元素比下一個元素大,就交換位置,否則就再進行判斷。
2.這一輪排序的使得這個陣列中最大的數排在了陣列的在最後一個位置,這一點很重要。
第二輪:
和第一輪同樣的方法,但是比較的次數少了一次,因為我們已經排出最大的數了,所以第二輪,可以排序出第二大的數,結果如下
{-1,-10,-2,3,9}
…
最多進行5輪排序,就可以將陣列排序好。
2.程式碼實現
package test1;
import java.util.Random;
/**
* 氣泡排序
*/
public class BubbleSort {
public static void main(String[] args) {
//int arr[] = {3,9,-1,-10,-2};
int arr[] = new int[80000];
//產生8萬條隨機數
for (int i = 0; i < 80000; i++) {
arr[i]= new Random().nextInt(80000);
}
long before = System.currentTimeMillis();
bubbleSort(arr);
long after = System.currentTimeMillis();
System.out.println((after-before)/1000);
}
public static int[] bubbleSort(int[] arr){
boolean flag = false;
for (int i = 0; i < arr.length; i++) {
int temp = 0;
for (int j = 1; j < arr.length-i; j++) {
if (arr[j-1]>arr[j]){
temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
flag = true;
}
}
//System.out.println(Arrays.toString(arr));
//如果已經排好序,就退出,不再進行判斷
if (!flag){
break;
}else {
flag = false;
}
}
return arr;
}
}
3.氣泡排序的優化
可以設想會有這樣一種情況,一共進行5輪排序,但是在第三輪的時候就陣列就已經排好序了,例如:
{5,4,1,2,3}
第三輪就已經排好序就無需繼續再進行比較,直接退出迴圈即可。
flag預設為false
//如果已經排好序,就退出,不再進行判斷
if (!flag){
break;
}else {
flag = false;
}
4.氣泡排序測試
將上面的程式碼執行之~
我的電腦測試了大約需要8秒的時間,順嘴提一句氣泡排序的時間複雜度時O(n^2)
相關文章
- 氣泡排序及優化排序優化
- 氣泡排序及優化詳解排序優化
- 如何優化氣泡排序?優化排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 十大經典排序演算法之氣泡排序排序演算法
- 資料結構java版之氣泡排序及優化資料結構Java排序優化
- 圖解氣泡排序及演算法優化(Java實現)圖解排序演算法優化Java
- 排序——氣泡排序排序
- 最簡單的氣泡排序還能怎麼優化?排序優化
- 氣泡排序排序
- 排序:氣泡排序&快速排序排序
- js氣泡排序JS排序
- JavaScript氣泡排序JavaScript排序
- 氣泡排序1排序
- 氣泡排序-fusha排序
- 氣泡排序演示排序
- Shell氣泡排序排序
- d氣泡排序排序
- 容器氣泡排序排序
- 氣泡排序法排序
- 氣泡排序(Java)排序Java
- Python 氣泡排序Python排序
- 軟體測試學習教程——Java實現氣泡排序Java排序
- 氣泡排序時間複雜度分析排序時間複雜度
- 資料結構系列:圖文詳解氣泡排序 & 優化資料結構排序優化
- 【排序演算法動畫解】排序介紹及氣泡排序排序演算法動畫
- 淺析氣泡排序排序
- 陣列氣泡排序陣列排序
- Python_氣泡排序Python排序
- 氣泡排序筆記排序筆記
- 氣泡排序(python版)排序Python
- 19_氣泡排序排序
- 函式氣泡排序函式排序
- 排序演算法--氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法–氣泡排序排序演算法
- 選擇排序和氣泡排序排序
- 氣泡排序與選擇排序排序