您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Java冒泡排序的案例的內容。小編覺得挺實用的,因此分享給大家做個參考。一起跟隨小編過來看看吧。
1、 導言
因為這是排序算法系列的第一篇文章,所以多啰嗦幾句。
排序是很常見的算法之一,現在很多編程語言都集成了一些排序算法,比如Java 的Arrays.sort()方法,這種方式讓我們可以不在乎內部實現細節而直接調用,在實際的軟件開發當中也會經常使用到。但是站在開發者的角度而言,知其然必須知其所以然。多練練排序算法,不僅能夠讓我們知道一些排序方法的底層實現細節,更能夠鍛煉我們的思維,提升編程能力。現在很多技術面試也會涉及到基本的排序算法,所以多練習是有好處的。(推薦:Java視頻教程)
文中涉及到的代碼都是Java實現的,但是不會涉及到太多的Java語言特性,并且我會加上詳細的注釋,幫助你理解代碼并且轉換成你熟悉的編程語言。
常見的排序算法有以下10種:
在開始具體的排序算法講解之前,先得明白兩個概念:
2. 言歸正傳
冒泡排序的思路其實很簡單,一個數據跟它相鄰的數據進行大小的比較,如果滿足大小關系,就將這兩個數據交換位置。一直重復這個操作,就能將數據排序。
舉個例子,假如有數組 a[3,5,1,4,9,6],第一次冒泡的操作如下圖所示:
重復進行這個操作,6次冒泡之后,數據排序完成。
根據這個思路,應該能很容易能夠寫出下面的代碼實現冒泡排序:
public class BubbleSort { //data表示整型數組,n表示數組大小 public static void bubbleSort(int[] data, int n){ //數組大小小于等于1,無須排序 if (n <= 1) return; for (int i = 0; i < n; i++) { for (int j = 0; j < n - i - 1; j++) { //如果data[j] > 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 <= 1) return; for (int i = 0; i < n; i++) { boolean flag = false;//判斷是否有數據交換 for (int j = 0; j < n - i - 1; j++) { //如果data[j] > 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; } } }
好了,冒泡排序的基本思路和代碼都已經實現,最后總結一下:
感謝各位的閱讀!關于Java冒泡排序的案例就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。