冒泡排序和二分查找

 1. 冒泡排序

 冒泡排序的接口,代码清单如下:

 1 import java.util.Comparator;
 2 
 3 /**
 4  * 排序器接口(策略模式:将算法封装到具有共同接口的独立的类中使得他们可以相互替换)
 5  */
 6 public interface Sorter {
 7 
 8     /**
 9      * 排序
10      * @param list 待排序的数组
11      * @param <T>
12      */
13     public <T extends Comparable<T>> void sort(T[] list);
14 
15     /**
16      * 排序
17      * @param list 待排序的数组
18      * @param comp 比较两个对象的比较器
19      * @param <T>
20      */
21     public <T> void sort(T[] list, Comparator<T> comp);
22 }

  冒泡排序的具体实现,代码清单如下:

 1 import java.util.Comparator;
 2 
 3 /**
 4  * 排序器接口(策略模式:将算法封装到具有共同接口的独立的类中使得他们可以相互替换)
 5  */
 6 public interface Sorter {
 7 
 8     /**
 9      * 排序
10      * @param list 待排序的数组
11      * @param <T>
12      */
13     public <T extends Comparable<T>> void sort(T[] list);
14 
15     /**
16      * 排序
17      * @param list 待排序的数组
18      * @param comp 比较两个对象的比较器
19      * @param <T>
20      */
21     public <T> void sort(T[] list, Comparator<T> comp);
22 }

 2. 二分查找

 1 import java.util.Comparator;
 2 
 3 /**
 4  * 二分查找
 5  * Created by doudou on 2018/1/19.
 6  */
 7 public class BinarySearch {
 8 
 9     public static <T extends Comparable<T>> int binarySearch(T[] x, T key) {
10         return binarySearch(x, 0, x.length - 1, key);
11     }
12 
13     /**
14      * 使用循环实现的二分查找
15      * @param x
16      * @param key
17      * @param comp
18      * @param <T>
19      * @return
20      */
21     public static <T> int binarySearch(T[] x, T key, Comparator<T> comp) {
22         int low = 0;
23         int high = x.length - 1;
24         while (low <= high) {
25             int mid = (low + high) >>> 1;
26             int cmp = comp.compare(x[mid], key);
27             if (cmp < 0) {
28                 low = mid + 1;
29             } else if (cmp > 0) {
30                 high = mid - 1;
31             } else {
32                 return mid;
33             }
34         }
35         return -1;
36     }
37 
38     /**
39      * 使用递归实现的二分查找
40      * @param x
41      * @param low
42      * @param high
43      * @param key
44      * @param <T>
45      * @return
46      */
47     private static <T extends Comparable<T>> int binarySearch(T[] x, int low, int high, T key) {
48         if (low <= high) {
49             int mid = low + ((high - low) >> 1);
50             if (key.compareTo(x[mid]) == 0) {
51                 return mid;
52             } else if (key.compareTo(x[mid]) > 0) {
53                 return binarySearch(x, low, mid - 1, key);
54             } else {
55                 return binarySearch(x, mid + 1, high, key);
56             }
57         }
58         return -1;
59     }
60 }
原文地址:https://www.cnblogs.com/xinlichai0813/p/8317549.html