原理:比較兩個相鄰的元素,將值大的元素交換至右端。java
思路:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。而後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。重複第一趟步驟,直至所有排序完成。數組
如下以數組【2,1,5,7,3】爲例子,相鄰兩位數比較,若前一數字較大,則互換位置,反之,則不改變順序ide
-----------第一輪相鄰數字比較-------------------------------------------------------------------工具
2大於1 --> 順序互換 1,2,5,7,3code
2小於5 --> 順序不變 1,2,5,7,3blog
5小於7 --> 順序不變 1,2,5,7,3排序
7大於3 --> 順序互換 1,2,5,3,7string
-----------第二輪相鄰數字比較--------------------------------------------------------------------class
1小於2 --> 順序不變 1,2,5,3,7test
2小於5 --> 順序不變 1,2,5,3,7
5大於3 --> 順序互換 1,2,3,5,7
5小於7 --> 順序不變 1,2,3,5,7
-----------第三輪相鄰數字比較--------------------------------------------------------------------
1小於2 --> 順序不變 1,2,3,5,7
2小於3 --> 順序不變 1,2,3,5,7
3小於5 --> 順序不變 1,2,3,5,7
5小於7 --> 順序不變 1,2,3,5,7
以上第三輪中已經沒有元素互換的操做了,說明冒泡排序已經能夠結束了。
package com.sort.utils; import java.util.Comparator; /** * 冒泡排序工具類 * @author huang * */ public class BubbleSortUtil { private BubbleSortUtil() { super(); } public static <T extends Comparable<T>> void sort(T[] list) { if(null != list && list.length > 1) { int len = list.length; boolean isSwaped = true; T temp = null; for(int i=0;i<len && isSwaped;i++) { isSwaped = false; for(int j=0;j<len-1-i;j++) { if(list[j].compareTo(list[j+1]) > 0) { temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; isSwaped = true; } } } } } public static <T> void sort(T[] list, Comparator<T> comparator) { if(null != list && list.length > 1 && null != comparator) { int len = list.length; T temp = null; boolean isSwaped = true; for(int i=0;i<len && isSwaped;i++) { isSwaped = false; for(int j=0;j<len-1-i;j++) { if(comparator.compare(list[j], list[j+1]) > 0) { temp = list[j]; list[j] = list[j+1]; list[j+1] = temp; isSwaped = true; } } } } } }
方法是靜態方法,直接經過類名調用便可。
package com.sort.bubble.test; import java.util.Arrays; import java.util.Comparator; import com.sort.utils.BubbleSortUtil; public class Ctest01 { public static void main(String[] args) { String[] stringArray = new String[] {"2","1","5","7","3"}; // BubbleSortUtil.sort(stringArray); BubbleSortUtil.sort(stringArray, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); System.out.println(Arrays.asList(stringArray).toString()); } }
輸出結果: