冒泡排序
(一)排序過程分析
????現(xiàn)在有一個數(shù)組智蝠,共有六個元素票摇,{1,4,7,2,3,5}坠敷,要求把他們按照從小到大的順序排列妙同,每一趟排序?qū)⑤^大的值交換到最右邊,下面進行排序過程分析膝迎。
(二)排序過程分析
????第一趟比較結(jié)束粥帚,得到{1,4,2,3,5,7},共比較5次限次;
????第二趟比較結(jié)束芒涡,得到{1,2,3,4,5,7}柴灯,共比較4次;
????第三趟比較結(jié)束费尽,得到{1,2,3,4,5,7}赠群,共比較3次;
????第四趟比較結(jié)束旱幼,得到{1,2,3,4,5,7}查描,共比較2次;
????第五趟比較結(jié)束柏卤,得到{1,2,3,4,5,7}冬三,共比較1次;
????至此缘缚,已經(jīng)無法再進行比較勾笆,該序列已經(jīng)有序,冒泡排序結(jié)束桥滨。由上述過程可知窝爪,冒泡排序的本質(zhì)就是元素之間的交換,共6個數(shù)该园,執(zhí)行5趟排序比較酸舍,若有n個數(shù),則是執(zhí)行n-1趟比較里初,每一趟從左到右比較相鄰的兩個數(shù)啃勉,如果大的數(shù)在左邊則進行交換,在每一趟比較結(jié)束后双妨,該趟最大的數(shù)在最右邊淮阐。
????時間復(fù)雜度分析:第一趟比較,是n個數(shù)進行比較刁品;第二趟比較泣特,是n-1個數(shù)進行比較;第三趟比較挑随,是n-2個數(shù)進行比較......所以這是一個等差數(shù)列求和最后得O(N2)(2是N的上標(biāo)值状您,因為簡書不支持latex)。
(二)Java代碼
public class BubbleSort {
public static void main(String[] args) {
int[] shus= {1,4,7,2,3,5};
//外面比較的是幾趟
for (int i = 1; i <= shus.length-1; i++) {
//第i趟從a[0]開始到a[n-i+1]都與他們的下一個數(shù)比較
for (int j = 0; j < shus.length-i; j++) {
if (shus[j] > shus[j+1]) {
int temp = shus[j];
shus[j] = shus[j+1];
shus[j+1] = temp;
}
}
}
print(shus);
}
public static void print(int shus[]) {
for (int i = 0; i < shus.length; i++) {
System.out.print(shus[i] + " ");
}
}
}