這篇文章帶給大家的內容是關於Java冒泡排序的詳細介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1、 導言
因為這是排序演算法系列的第一篇文章,所以多囉嗦幾句。
排序是很常見的演算法之一,現在很多程式語言都整合了一些排序演算法,像是Java 的Arrays.sort()方法,這種方式讓我們可以不在乎內部實作細節而直接調用,在實際的軟體開發當中也會經常使用到。但是站在開發者的角度而言,知其然必須知其所以然。多練練排序演算法,不僅能夠讓我們知道一些排序方法的底層實作細節,更能夠鍛鍊我們的思維,提升程式設計能力。現在很多技術面試也會牽涉到基本的排序演算法,所以多練習是有好處的。 (推薦:Java影片教學)
文中涉及到的程式碼都是Java實現的,但是不會涉及太多的Java語言特性,而且我會加上詳細的註釋,幫助你理解程式碼並且轉換成你熟悉的程式語言。
常見的排序演算法有以下10種:
- 冒泡排序、選擇排序、插入排序,平均時間複雜度都是O(n2 )
- 希爾排序、歸併排序、快速排序、堆排序,平均時間複雜度都是O(nlogn)
- 計數排序、基數排序、桶排序,平均時間複雜度都是O(n k)
在開始具體的排序演算法講解之前,先得明白兩個概念:
- ##原地排序:指的是排序的過程當中不會佔用額外的儲存空間,空間複雜度為O(1)。
- 排序演算法的穩定性:一個穩定的排序,指的是排序之後,相同元素的前後順序不會被改變,反之稱為不穩定。舉個例子:一個陣列[3,5,1,4,9,6,
- 6,12] 有兩個6(為了區分,我把其中一個6 加粗),如果排序之後是這樣的:[1,3,4,5,6,6,9,12](加粗的6 仍然在前面),就說明這是一個穩定的排序演算法。
2. 言歸正傳冒泡排序的想法其實很簡單,一個資料跟它相鄰的資料進行大小的比較,如果滿足大小關係,就將這兩個資料交換位置。一直重複這個操作,就能將資料排序。 舉個例子,假如有數組a[3,5,1,4,9,6],第一次冒泡的操作如下圖所示:
public class BubbleSort { //data表示整型数组,n表示数组大小 public static void bubbleSort(int[] data, int n){ //数组大小小于等于1,无须排序 if (n data[j + 1],交换两个数据的位置 if (data[j] > data[j + 1]){ int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; } } } } }但是這個排序演算法還可以進行最佳化,當冒泡操作已經沒有資料交換的時候,說明排序已經完成,就不用在進行冒泡操作了。例如上面的例子,第一次冒泡之後,數據為[3,1,4,5,6,9],再進行一次冒泡,數據變為[1,3,4,5,6,9] ,此時已經完成了排序,就可以結束循環了。 所以針對這個陣列的排序,上面的程式碼需要6次冒泡才能完成,其中有4次都是不需要的。所以可以對程式碼進行最佳化:
public class BubbleSort { //优化后的冒泡排序 //data表示整型数组,n表示数组大小 public static void bubbleSort(int[] data, int n){ //数组大小小于等于1,无须排序,返回空 if (n data[j + 1],交换两个数据的位置 if (data[j] > data[j + 1]){ int temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp; flag = true;//表示有数据交换 } } //如果没有数据交换,则直接退出循环 if (!flag) break; } } }好了,冒泡排序的基本想法和程式碼都已經實現,最後總結一下:
- 冒泡排序是基於資料比較的
- 最好情況時間複雜度是O(n),最壞情況時間複雜度是O(n
- 2),平均時間複雜度是O(n2) 冒泡排序是原地排序演算法,並且是穩定的。
以上是Java冒泡排序的詳細介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具