冒泡排序幾乎是個程序員都寫得出來,可是面試的時候如何寫一個逼格高的冒泡排序卻不是每一個人都能作到,下面提供一個參考代碼:java
1 import java.util.Comparator; 2 3 /** 4 * 排序器接口(策略模式: 將算法封裝到具備共同接口的獨立的類中使得它們能夠相互替換) 5 * 6 */ 7 public interface Sorter { 8 9 /** 10 * 排序 11 * @param list 待排序的數組 12 */ 13 public <T extends Comparable<T>> void sort(T[] list); 14 15 /** 16 * 排序 17 * @param list 待排序的數組 18 * @param comp 比較兩個對象的比較器 19 */ 20 public <T> void sort(T[] list, Comparator<T> comp); 21 }
1 import java.util.Comparator; 2 3 /** 4 * 冒泡排序 5 * 6 * 7 */ 8 public class BubbleSorter implements Sorter { 9 10 @Override 11 public <T extends Comparable<T>> void sort(T[] list) { 12 boolean swapped = true; 13 for (int i = 1, len = list.length; i < len && swapped; ++i) { 14 swapped = false; 15 for (int j = 0; j < len - i; ++j) { 16 if (list[j].compareTo(list[j + 1]) > 0) { 17 T temp = list[j]; 18 list[j] = list[j + 1]; 19 list[j + 1] = temp; 20 swapped = true; 21 } 22 } 23 } 24 } 25 26 @Override 27 public <T> void sort(T[] list, Comparator<T> comp) { 28 boolean swapped = true; 29 for (int i = 1, len = list.length; i < len && swapped; ++i) { 30 swapped = false; 31 for (int j = 0; j < len - i; ++j) { 32 if (comp.compare(list[j], list[j + 1]) > 0) { 33 T temp = list[j]; 34 list[j] = list[j + 1]; 35 list[j + 1] = temp; 36 swapped = true; 37 } 38 } 39 } 40 } 41 }