Java實現(xiàn)冒泡排序示例介紹
何為冒泡排序
冒泡:就像氣泡從水中冒出來一樣
在冒泡排序中,最小數(shù)或最大數(shù)取決于您是按升序還是降序對數(shù)組進行排序,向上冒泡到數(shù)組的開頭或結尾。
算法描述:
- 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對,這樣在最后的元素應該會是最大的數(shù);
- 針對所有的元素重復以上的步驟,除了最后一個;
- 重復步驟1~3,直到排序完成。
如果兩個元素相等,不會再交換位置,所以冒泡排序是一種穩(wěn)定排序算法。
代碼實現(xiàn):
數(shù)組排序
/* 對數(shù)組a中的元素進行排序 */ public static void sort(Comparable[] a){ for(int i=a.length-1;i>0;i--){ for(int j=0;j<i;j++){ //{6,5,4,3,2,1} //比較索引j和索引j+1處的值 if (greater(a[j],a[j+1])){ exch(a,j,j+1); } } } }
比較v元素是否大于w元素
private static boolean greater(Comparable v,Comparable w){ return v.compareTo(w)>0; }
數(shù)組元素i和j交換位置
private static void exch(Comparable[] a,int i,int j){ Comparable temp; temp = a[i]; a[i]=a[j]; a[j]=temp; }
排序類
public static void bubbleSort(int[] data) { int arrayLength = data.length; for (int i = 1; i < arrayLength; i++) {//第i次排序 for (int j = 0; j < arrayLength - i; j++) {//從索引為j的數(shù)開始 if (data[j] > data[j + 1]) { //相鄰元素兩兩對比 int temp = data[j + 1]; // 元素交換 data[j + 1] = data[j]; data[j] = temp; } } System.out.println("第" + i + "次排序:\n" + java.util.Arrays.toString(data)); } }
完整代碼:
public class BubbleSort { public static void bubbleSort(int[] data) { int arrayLength = data.length; for (int i = 1; i < arrayLength; i++) {//第i次排序 for (int j = 0; j < arrayLength - i; j++) {//從索引為j的數(shù)開始 if (data[j] > data[j + 1]) { //相鄰元素兩兩對比 int temp = data[j + 1]; // 元素交換 data[j + 1] = data[j]; data[j] = temp; } } System.out.println("第" + i + "次排序:\n" + java.util.Arrays.toString(data)); } } public static void main(String[] args) { int[] data = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48}; System.out.println("排序之前:\n" + java.util.Arrays.toString(data)); bubbleSort(data); System.out.println("排序之后:\n" + java.util.Arrays.toString(data)); } }
排序之前:
[3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48]
第1次排序:
[3, 38, 5, 44, 15, 36, 26, 27, 2, 46, 4, 19, 47, 48, 50]
第2次排序:
[3, 5, 38, 15, 36, 26, 27, 2, 44, 4, 19, 46, 47, 48, 50]
第3次排序:
[3, 5, 15, 36, 26, 27, 2, 38, 4, 19, 44, 46, 47, 48, 50]
第4次排序:
[3, 5, 15, 26, 27, 2, 36, 4, 19, 38, 44, 46, 47, 48, 50]
第5次排序:
[3, 5, 15, 26, 2, 27, 4, 19, 36, 38, 44, 46, 47, 48, 50]
第6次排序:
[3, 5, 15, 2, 26, 4, 19, 27, 36, 38, 44, 46, 47, 48, 50]
第7次排序:
[3, 5, 2, 15, 4, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第8次排序:
[3, 2, 5, 4, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第9次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第10次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第11次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第12次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第13次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
第14次排序:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
排序之后:
[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]
Process finished with exit code 0
到此這篇關于Java實現(xiàn)冒泡排序示例介紹的文章就介紹到這了,更多相關Java冒泡排序內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Kotlin?標準函數(shù)和靜態(tài)方法示例詳解
這篇文章主要為大家介紹了Kotlin?標準函數(shù)和靜態(tài)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10springBoot controller,service,dao,mapper,model層的作用說明
這篇文章主要介紹了springBoot controller,service,dao,mapper,model層的作用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11MyBatisPlus中@TableField注解的基本使用
這篇文章主要介紹了MyBatisPlus中@TableField注解的基本使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07詳解Springboot @Cacheable 注解(指定緩存位置)
這篇文章主要介紹了詳解Springboot @Cacheable 注解(指定緩存位置),使用? @Cacheable ?注解就可以將運行結果緩存,以后查詢相同的數(shù)據(jù),直接從緩存中取,不需要調用方法,需要的朋友可以參考下2023-09-09SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包
這篇文章主要介紹了SpringBoot Mybatis如何配置多數(shù)據(jù)源并分包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05Java中優(yōu)先隊列PriorityQueue常用方法示例
這篇文章主要介紹了Java中優(yōu)先隊列PriorityQueue常用方法示例,PriorityQueue是一種特殊的隊列,滿足隊列的“隊尾進、隊頭出”條件,但是每次插入或刪除元素后,都對隊列進行調整,使得隊列始終構成最小堆(或最大堆),需要的朋友可以參考下2023-09-09