冒泡排序
冒泡排序(Bubble Sort)
-
冒泡排序的算法原理
比较相邻的元素,如果前一个元素的值比后一个元素的值大,就交换元素的位置,对每一对元素做相同的工作。

第一次排序:比较4和5的大小,4<5,不交换位置。比较5和6的大小,5<6不交换。比较6和3的大小,6>3,交换位置。再比较6和2的大小,6>2交换。最后比较6和1的大小,6>1交换。第一次排序后,最大的元素6到了最后的位置,并且6将不再进行下一轮的排序。
第二次排序:比较4和5的大小,4<5,不交换位置。比较5和3的大小,5>3交换位置。比较5和2的大小,5>2交换位置。比较5和1的大小,5>1交换位置。5放到的最后位置,并且5也将不再进行下一轮排序。
第三次排序:比较4和3的大小,4>3交换位置,比较4和2的大小,4>2交换位置,比较4和1的大小,4>1交换位置。4放到最后位置并且不再参与排序。
第四次排序:比较3和2的大小,3>2交换位置,比较3和1的大小,3>1交换位置,3放到最后位置并且不参与排序。
第五次排序:比较2和1的大小,2>1交换位置。2放到最后位置。 -
冒泡排序的代码
public class BubbleSort {
private static boolean greater(Comparable v, Comparable w){
return v.compareTo(w)>0;
}
private static void exch(Comparable[] a,int i,int j){
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void sort(Comparable[] a){
//外层决定排序的次数
for(int i = a.length-1;i>0;i--){
//内层决定比较的次数
for (int j = 0;j<i;j++){
//比较索引j和索引j+1处值的大小,并判断是否进行交换
if (greater(a[j],a[j+1])){
exch(a,j,j+1);
};
}
}
}
}
冒泡排序的时间复杂度为:O(n²)。
冒泡排序的稳定性:由代码可知,当两个元素的值相等时,不会进行交换的操作,所以冒泡排序是一个稳定排序算法。

浙公网安备 33010602011771号