排序思路:整個演算法從最下面的元素開始,對相鄰的元素進行比較,經過交換使得較小的元素在較大的元素之上,經過對每個元素的兩兩比較,最後最小的元素被移到前面的位置。
演算法實現:
publicclass
bubblesort
}}
}
public
static
void
main(string args) ;
system.
out.println("
排序之前:");
for(int
element : array)
bubblesort(array);
system.
out.println("
\n排序之後:");
for(int
element : array)
}}
演算法改進:在某些情況下,可能在第i趟時元素就已經全部排好序了,此時我們就不必在再進行後面幾趟的比較了。
如元素:1 2 3 4 9 8 7 6 5 從元素5開始第一趟比較開始,經過4趟的比較後元素由1 2 3 4 9 8 7 6 5 ---> 1 2 3 4 5 6 7 8 9 這時由元素4開始進行第5趟比較
在這趟比較結束後發現並沒有元素進行交換,說明後面的元素已經排好序了,無需再進行比較了。
演算法實現:
publicclass
bubblesort
}if(!flag)//
如:5 4 3 2 1 7 8 9
break; //
如果flag為false,則說說明這一趟沒有起先交換 ,已經排序好了,就不用再比較了
} }
public
static
void
main(string args) ;
system.
out.println("
排序之前:");
for(int
element : array)
bubblesort(array);
system.
out.println("
\n排序之後:");
for(int
element : array)
}}
演算法分析:1.若初始資料序列是正序的,則進行一趟的比較後就完成了排序,此時比較的次數和移到次序均達到最小值:cmin = n-1 mmin = 0;
時間複雜度為o(n);(n為元素個數)
2.若元素資料序列是反序,則需要進行n-1趟排序,每趟排序要進行n-i+1次比較(0≤imax = (n-1)+(n-2)+(n-3)+....+1 = n*(n-1)/2 = o(n2) mmax = 3*[(n-1)+(n-2)+(n-3)+....+1] = 3*[n*(n-1)/2] = o(n2) ;
時間複雜度為o(n2) ;
3.在氣泡排序中只使用了i,j,temp,flag這4個輔助變數,與問題規模n無關,所以空間複雜度為o(1)。
4.當i > j且arr[i] = arr[j]時,兩者不進行交換,arr[i]和arr[j]的相對位置保持不變,所以氣泡排序是一種穩定的排序。
資料結構 排序之氣泡排序
資料結構 排序 可以通過理解各個排序演算法的不變性來加深對演算法的理解 氣泡排序bubblesort 不變性 out右邊的所有資料項都是有序的。out為outer loop外迴圈體中的變數。the point for out arrlen 1 out 1 out the code public cl...
資料結構之排序 氣泡排序
簡介 氣泡排序屬於交換排序的一種。交換排序就是根據序列中兩個元素關鍵字的比較結果來對換這兩個記錄在序列中的位置。交換排序的演算法有很多,著重需要掌握的有氣泡排序和快速排序。基本思想 長為n的序列表,從前往後 或從後往前 兩兩比較相鄰元素的值,若為逆序,則交換他們,知道所有序列比較完。每一趟冒泡都會將...
資料結構之氣泡排序
2.編寫乙個氣泡排序的演算法,並且在main函式中驗證其功能已實現 氣泡排序 bubble sort 的基本思想,設想排序r 1 到r n 垂直放置,將記錄 r i 看作是重量為r i key的氣泡 根據氣泡不能在重氣泡之下的原則,從下往 上掃瞄陣列r,凡違反原則的輕氣泡,就使其向上 飄浮 如此反覆...