JAVA十大排序算法之冒泡排序詳解
冒泡排序
1.從數(shù)組頭開始,比較相鄰的元素。如果第一個比第二個大(小),就交換它們兩個
2.對每一對相鄰元素作同樣的工作,從開始第一對到尾部的最后一對,這樣在最后的元素應(yīng)該會是最大(小)的數(shù)
3.重復(fù)步驟1~2,重復(fù)次數(shù)等于數(shù)組的長度,直到排序完成

代碼實(shí)現(xiàn)
對下面數(shù)組實(shí)現(xiàn)排序:{24, 7, 43, 78, 62, 98, 82, 18, 54, 37, 73, 9}
代碼實(shí)現(xiàn)
public class BubbleSort {
public static final int[] ARRAY = {24, 7, 43, 78, 62, 98, 82, 18, 54, 37, 73, 9};
public static void main(String[] args) {
print(ARRAY);
System.out.println("============================================");
print(sort(ARRAY));
}
public static int[] sort(int[] array) {
if (array.length == 0) {
return array;
}
for (int i = 0; i < array.length; i++) {
//array.length - 1 -i 已經(jīng)冒泡到合適位置無需在進(jìn)行排序,減少比較次數(shù)
for (int j = 0; j < array.length - 1 -i; j++) {
//前面的數(shù)大于后面的數(shù)交換
if (array[j + 1] < array[j]) {
int temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
public static void print(int[] array) {
for (int i : array) {
System.out.print(i + " ");
}
System.out.println("");
}
}
時間復(fù)雜度
對于上面12個數(shù)據(jù)項(xiàng),從第一個元素開始,第一趟比較了11次,第二趟比較了10次,依次類推,一直到最后一趟,就是:
11 + 10 + 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 66次
若有n個元素,則第一趟比較為(n-1)次,第二趟比較為(n-2)次,依次類推:
(n-1) + (n-2) + (n-3) + ...+ 2 + 1 = n * (n-1)/2
在大O表示法中,去掉常數(shù)系數(shù)和低階項(xiàng),該排序方式的時間復(fù)雜度為:O(n2)
算法穩(wěn)定性
假定在待排序的記錄序列中,存在多個具有相同的關(guān)鍵字的記錄,若經(jīng)過排序,這些記錄的相對次序保持不變,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,則稱這種排序算法是穩(wěn)定的;否則稱為不穩(wěn)定的。——百度百科
在代碼中可以看到,array[j + 1] = array[j]的時候,我們可以不移動array[i]和array[j],所以冒泡排序是穩(wěn)定的。
總結(jié)
本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
JavaWeb三大組件之監(jiān)聽器Listener詳解
這篇文章主要介紹了JavaWeb三大組件之監(jiān)聽器Listener詳解,在JavaWeb應(yīng)用程序中,Listener監(jiān)聽器是一種機(jī)制,用于監(jiān)聽和響應(yīng)特定的事件,它可以感知并響應(yīng)與應(yīng)用程序相關(guān)的事件,從而執(zhí)行相應(yīng)的邏輯處理,需要的朋友可以參考下2023-10-10
JavaWeb實(shí)現(xiàn)郵件發(fā)送接收功能
這篇文章主要為大家詳細(xì)介紹了JavaWeb郵件發(fā)送接收功能的實(shí)現(xiàn),郵件發(fā)送和接收功能是非常常用的功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-12-12
Javascript和Java語言有什么關(guān)系?兩種語言間的異同比較
雖然Javascript與Java有緊密的聯(lián)系,但卻是兩個公司開發(fā)的不同的兩個產(chǎn)品。那么js和java有什么關(guān)系,兩種語言的不同點(diǎn)是什么呢?介于這兩個問題,小編一起給大家解答下2016-09-09
一天時間用Java寫了個飛機(jī)大戰(zhàn)游戲,朋友直呼高手
前兩天我發(fā)現(xiàn)論壇有兩篇飛機(jī)大戰(zhàn)的文章異?;鸨?但都是python寫的,竟然不是我大Java,說實(shí)話作為老java選手,我心里是有那么一些失落的,今天特地整理了這篇文章,需要的朋友可以參考下2021-05-05
對java for 循環(huán)執(zhí)行順序的詳解
今天小編就為大家分享一篇對java for 循環(huán)執(zhí)行順序的詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
java 字符串轉(zhuǎn)化為字符數(shù)組的3種實(shí)現(xiàn)案例
這篇文章主要介紹了java 字符串轉(zhuǎn)化為字符數(shù)組的3種實(shí)現(xiàn)案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10

